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

Promise that returns second promise result if first fails

本文关键字:承诺 第二个 结果 返回 失败 如果 第一个      更新时间:2023-09-26

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

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

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块中!