如果第一个承诺(缓存中的值)失败,我想返回第二个承诺的值。
我有以下代码,但未定义解析。
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 都正确返回 promise。
有没有办法做到这一点,还是我考虑错误了?
您根本不需要创建新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()
返回的承诺。
我还注意到,您问题的第一行实际上给出了解决方案:"如果第一个(缓存中的值)失败,我想返回第二个承诺的值。 - 您从未真正将return
放入.catch
块中!