我正在尝试为async
函数提供一种优雅的实现,该函数每check()
秒尝试一次检查操作t
,最多n
次;即,如果check() === true
,我想立即返回,否则,我想在t * n
秒(n
次尝试)后纾困。
我有一个使用基于计数器的for循环和简单延迟的有效实现方式:
// doc and pair are defined already
let delay = ms => new Promise(res => setTimeout(res, ms))
for (i = 0; i < 10; i++) {
if (doc.key) {
break
}
await delay(1000)
doc = await DbModel.findOne(pair)
}
是否有使用本机es6功能(例如,setTimeout
和setInterval
的允诺版本)实现此目的的更好方法?
答案 0 :(得分:0)
您可以尝试node-scheduer。与cronjob非常相似。但是应用程序必须保持运行状态。
它以给定的间隔执行一个事件。确保每次在所需的时间间隔之后执行作业,然后在其中放置重复的功能。