如果第一次失败则返回第二个承诺结果的承诺

时间:2016-04-27 20:01:19

标签: javascript promise bluebird

如果第一个(缓存中的值)失败,我想返回第二个promise的值。

我有以下代码,但未定义resolve。

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。

有没有办法实现这一目标,还是我不正确地思考它?

1 个答案:

答案 0 :(得分: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()调用成功,则生成的已解决的Promise应跳过.catch并直接返回。

如果缓存调用失败,则返回从getRouteConfigFromWeb()返回的Promise。

我还注意到你问题的第一行实际上给出了解决方案:“如果第一个(缓存中的值)失败,我想返回第二个promise的值。” - 你实际上从未在return区块中放置.catch