2016-04-27 6 views
0

Ich möchte den Wert eines zweiten Versprechens zurückgeben, wenn der erste (Wert im Cache) fehlschlägt.Versprechen, das zweites Versprechensergebnis zurückgibt, wenn es zuerst fehlschlägt

Ich habe den folgenden Code, aber die Auflösung ist nicht definiert.

exports.getConfig = function (a, r) { 
    return new Promise(resolve, reject) { 
    getConfigFromCache(a, r) 
     .catch(function(e){ 
      getRouteConfigFromWeb(a, r) 
     }).then(function(result) { 
      //return value of the promise that was called 
      resolve(result) 
     }) 
    } 
}; 

wird angenommen, dass beide getConfigFromCache und getRouteConfigFromWeb Rückkehr richtig verspricht.

Gibt es einen Weg, dies zu erreichen, oder denke ich falsch darüber nach? direkt

exports.getConfig = function (a, r) { 
    var cache = getConfigFromCache(a, r); 
    return cache.catch(function(e) { 
     return getRouteConfigFromWeb(a, r); // NB: return *essential* 
    }); 
} 

Wenn der getConfigFromCache() Aufruf erfolgreich ist, ist die resultierende gelöst Versprechen sollte überspringen durch die .catch und erhalten zurückgegeben:

+0

Sie ... nie genannt Auflösung oder ablehnen .. –

+0

danke für das zeigen, dass. Ich habe immer noch das gleiche Problem beim Aufruf von resolve (result) –

+0

versuchen, Caching 'resolve'. 'var _resolve = resolve;' oder etwas Ähnliches, bevor Sie 'getConfig' eingeben – Ryan

Antwort

3

Sie sollten kein neues Promise überhaupt erstellen müssen.

Wenn der Cache-Aufruf fehlschlägt, wird stattdessen das von getRouteConfigFromWeb() zurückgegebene Versprechen zurückgegeben.

Ich bemerke auch, dass die erste Zeile Ihrer Frage tatsächlich die Lösung gibt: "Ich möchte den Wert eines zweiten Versprechens zurückgeben, wenn der erste (Wert im Cache) fehlschlägt." - Sie haben nie eine return in den .catch Block gesetzt!

+0

Das ist richtig. Das Versprechen wurde schließlich weitergegeben. –

+0

@ user1886721 Der Schlüssel, den Sie in Ihrem ursprünglichen Code vermissten, war das 'return' im' .catch' Block. Ohne es ist die Promise-Kette kaputt. – Alnitak

Verwandte Themen