2016-04-27 11 views
0

最初の(キャッシュ内の値)が失敗した場合、2番目の約束の値を返したいと思います。最初に失敗した場合に2番目の約束結果を返す約束

私は以下のコードを持っていますが、解決は定義されていません。

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) 
     }) 
    } 
}; 

getConfigFromCacheとgetRouteConfigFromWebの両方が正常に返すと仮定します。

これを達成する方法はありますか、それとも間違って考えていますか?

+0

あなたは解決または拒否とは決して言われません。 –

+0

それを指摘してくれてありがとう。私はresolve(result) –

+0

を呼び出すときに 'resolve'をキャッシュしようとするときにも同じ問題があります。 'getConfig'を入力する前に、' var _resolve = resolve; 'またはそれに類するものを返します。 – Ryan

答えて

3

あなたは全く新しいPromiseを作成する必要はありません。

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

getConfigFromCache()呼び出しが成功した場合、結果は約束が.catchをスキップすべきであると直接返されます解決。

キャッシュ呼び出しが失敗した場合は、代わりにgetRouteConfigFromWeb()から返されたPromiseが返されます。

質問の最初の行は実際に解決策を示しています:"最初の(キャッシュ内の値)が失敗した場合、2番目の約束の値を返したいと思います。" - 実際にブロック.catchreturnを置くことはありません。

+0

これは正しいです。結局のところ、この約束が終わった。 –

+0

@ user1886721元のコードに欠けていた重要なことは、 '.catch'ブロック内の' return'でした。それがなければ、Promiseチェーンは壊れています。 – Alnitak