我有一个异步块:
test().then(function(result){
// Success: Do something.
doSomething();
}).catch(function(error){
// Error: Handle the error, retry!
// How to re-run this whole block?
});
我可以跟踪成功和失败的结果。但是,是否可以重试整个test()。然后()。如果我们失败了,catch()
chain?然后继续重试,直到问题解决?
如果输入了catch块,您可以将整个内容放入一个递归调用自身的函数中:
function tryTest() {
return test().then(function(result) {
// Success: Do something.
doSomething();
}).catch(function(error) {
// error handling
// make sure to return here,
// so that the initial call of tryTest can know when the whole operation was successful
return tryTest();
});
}
tryTest()
.then(() => {
console.log('Finished successfully');
});
如果您的doThings
可以接受结果
参数,并且如果tryTest
不接受任何参数,您可以将上述内容简化为:
function tryTest() {
return test()
.then(doSomething)
.catch(tryTest);
}
tryTest()
.then(() => {
console.log('Finished successfully');
});
假设这一切都是关于将请求重新发送到某个有缺陷/臃肿的第三方API
如果这是生产问题,而不是教育问题,我建议搜索第三方库,自行实现。
比如说对于axios,有一个很好的axios重试。
为什么?假设您可能认为只有一种情况下API say返回502。但实际上还有更多情况,最好记住:
如果你自己写这样一个逻辑,那就太过分了。尝试使用最简单的解决方案可能会在你们意想不到的时候打击你们。
PS也是一个额外的好处,您可以使用单个片段将所有请求配置为某些特定的API,就像axios
'自定义实例一样(我相信应该有其他插件用于替代库)
如果可以切换到异步/等待语法,则可以使用while循环:
let keepTrying;
do {
try {
await test();
keepTrying = false;
} catch {
keepTrying = true;
}
} while (keepTrying)
doSomething();
然后,您可以将重试逻辑抽象为它自己的函数以供重用。
我有一个异步函数,我想同时测试成功和失败。函数成功时返回一个字符串,失败时抛出。我在测试失败上失败得很惨。下面是我的代码: 我通过注释失败的代码并在注释中添加结果来禁用 正如你所看到的,什么都不起作用。我相信我的测试几乎是第一个失败测试的Promises示例和最后一个失败测试的Async/Await示例的完全副本,但是没有一个可以工作。 我相信与Jest文档中的示例的不同之处在于,它们展示了如何测
我正在使用编写promise代码。然后现在,我决定使用wait/async编写它。我在promise中调用了一个函数add_,然后在中调用了另一个函数。然后是该函数的一部分。这是我使用的代码。然后 这是使用wait/async的代码。 使用await/async的代码显示了一个错误,即add\u lessons是意外标识符。那么,告诉我如何在promise中定义异步函数?
转换为任务返回委托的异步lambda表达式不能返回值
我试图了解异步/等待如何与promise一起工作。 据我所知,await应该是阻塞的,在上面的代码中,它似乎阻塞了返回带有原语
我创建了新的Deploy-to-staging项目,并将其配置编辑如下: > 在构建中,选择从另一个项目复制工件选择项目工件 选择生成后操作 我怎么才能修好这个? 我的tomcat凭据位于[tomcat目录]/conf/tomcat-users.xml中,如下所示: