推荐这种相当简单的方法:
async function retry(promiseFactory, retryCount) {
try {
return await promiseFactory();
} catch (error) {
if (retryCount <= 0) {
throw error;
}
return await retry(promiseFactory, retryCount - 1);
}
}
此函数调用promiseFactory
, 并等待返回的 Promise 完成。如果发生错误,该过程将(递归地)重复,直到retryCount
达到0
。
代码示例
您可以像这样使用该函数:
await retry(
() => page.waitForXPath('//*[contains(@class, ".customer_name")]/ancestor::li'),
5 // retry this 5 times
);
您还可以传递任何其他返回 Promise 的函数,例如Promise.all
:
await retry(
() => Promise.all([
page.goto(url),
page.waitForNavigation({ waitUntil: 'domcontentloaded' }),
]),
1 // retry only once
);
不要结合 await 和 catch
另一个建议:您不应await
与.then
或结合使用,.catch
因为这会导致意外问题。使用块或使用和await
包围您的代码。否则您的代码可能正在等待函数的结果完成等。try..catch
.then
.catch
catch
相反,您可以try..catch
这样使用:
try {
// ...
} catch (error) {
logMyErrors(error);
}
评论功能已关闭。