首页 > 解决方案 > 重试失败的异步/承诺功能?

问题描述

我有这个异步块:

test().then(function(result){
    // Success: Do something.
    doSomething();
}).catch(function(error){
    // Error: Handle the error, retry!
    // How to re-run this whole block?
});

我可以跟踪success结果failedtest().then().catch()但是,如果我们失败了,是否可以重试整个链?并继续重试直到条件解决?

标签: javascriptnode.jsasynchronouspromise

解决方案


如果可以切换到async/await语法,则可以使用while循环:

let keepTrying;

do {
    try {
        await test();
        keepTrying = false;
    } catch {
        keepTrying = true;
    }
} while (keepTrying)

doSomething();

然后,您可以将重试逻辑抽象为自己的函数以供重用。


推荐阅读