问题:
我正在编写一个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);
});
}
代码中我缺少什么?请阐明。