What is the difference between using setTimeout(async functi



当一个请求被发送到我的服务器端点时,我运行一个非阻塞的函数makeOrder

如果第一次使用setTimeout失败,我想再次运行该函数,但我不确定是否应该在setTimeout中使用async,以确保它不会阻塞事件循环。

我现在正在做的是:

if (await makeOrder(order)) {
// order was successful
} else {
// try again in 5 minutes
setTimeout(async function() {
makeOrder(order);
}, 300000);
}

这是正确的吗?(makeOrder根据成功与否返回true或false(

我想知道如果我使用async函数和just函数,如果有更多的请求到达我的端点,那么代码阻塞和不阻塞是否有区别?

async关键字:

  • 强制函数返回promise(由于setTimeout忽略返回值,因此这是无关的(
  • 允许您在函数中使用await关键字

它不会阻止阻塞代码被阻塞。

使用async是您需要在函数内部管理承诺。在这种情况下,它没有其他用途。

您调用的唯一函数返回布尔值,而不是promise,因此您没有任何promise要管理。添加async是毫无意义的(并且可能会让您或将来维护代码的其他人感到困惑(。

您可以使用递归来完成此操作。因为您可以在您的订单未成功后在特定的持续时间内重试。失败应该在catch块中,因为当您想在某些重试后停止操作时,这将是直观的。

function makeOrderWrapper(order, retry) {
return new Promise(function (resolve, reject) {
try {
if (retry < 0 )
reject();
makeOrder(order);
resolve();
} catch (exception) {
setTimeout(function () {
makeOrderWrapper(url, retry - 1).then(function () {
resolve();
});
}, 300000);
}
});
}
await makeOrderWrapper(order, 3)

相关内容

  • 没有找到相关文章

最新更新