user1886721 user1886721 - 2 years ago 76
Javascript Question

Promise that returns second promise result if first fails

I would like to return the value of a second promise if the first (value in cache) fails.

I have the following code, but resolve is not defined.

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


Assume that both getConfigFromCache and getRouteConfigFromWeb return promises correctly.

Is there a way to accomplish this, or am I thinking through it incorrectly?

Answer Source

You shouldn't need to create a new Promise at all:

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

If the getConfigFromCache() call succeeds, the resulting resolved Promise should skip through the .catch and get returned directly.

If the cache call fails, the Promise returned from getRouteConfigFromWeb() is returned instead.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download