承诺不会陷入困境

时间:2019-08-25 19:02:45

标签: javascript es6-promise

问题:

我正在编写一个Promise重试功能(它将在'x'次尝试时重试Promise)。

问题:

  

但是,我无法理解为什么.catch()块没有   被调用。它抱怨说没有捕获块(即使   我有一个)

     

如何确保catch块被调用?

这是我的代码:

// This function waits for 'timeout'ms before resolving itself.
function wait(timeout) {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            resolve();
        }, timeout)
    });
}

// Library function to retry promise.
function retryPromise(limit, fn, timeout=1000) {
    return new Promise((resolve, reject) => {
        fn().then(function(val) {
            return resolve(val);
        }, function(err) {
            if(limit === 0) return reject('boom finally');
            console.log("Retrying Promise for attempt", limit);
            wait(timeout).then(() => retryPromise(limit-1, fn, timeout));
        })
    });
}


// Caller
const print = retryPromise(3, demo);
print.then(function(result) {
    console.log(result);
}).catch(function(err){
    console.log('Inside catch block');
    console.error("Something went wrong", err);
});

function demo(val) {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            return reject(val || 1000);
        }, 1000);
    });
}

代码中我缺少什么?请阐明。

0 个答案:

没有答案