我正在使用 node 和 typescript,使用 node-cron 2.0 安排后臺操作每小時運行一次。
cron.schedule("0 0 * * * *", () => {
purgeResponsesSurveys();
});
我擔心如果方法沒有在 1 小時內完成會發生什么,因為我不希望我的方法的兩個實體同時運行。
purgeResponsesSurveys如果調度程式已經從之前的每小時呼叫中運行,那么防止調度程式呼叫該函式的最佳實踐是什么?
uj5u.com熱心網友回復:
您可以使用 aSemaphore來防止并行呼叫。
您將需要知道何時purgeResponsesSurveys完成。因此,如果它是異步的,您將需要回傳Promise或接收callback將在purgeResponsesSurveys完成時呼叫的。
我使用了信號量npm 包。這是一個小例子/模擬。
const semaphore = require('semaphore');
const sem = semaphore(1);
simulateCron(function() {
console.log('cron was triggered')
// wrap task with mutex
sem.take(function() {
longTask(function(){
sem.leave();
})
})
})
function longTask(cb) {
console.log("Start longTask")
setTimeout(function(){
cb()
console.log("Done longTask")
}, 3000)
}
function simulateCron(cb) {
setInterval(cb, 500)
}
// output
cron was triggered
Start longTask
cron was triggered
cron was triggered
cron was triggered
cron was triggered
cron was triggered
Done longTask
Start longTask
cron was triggered
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/429981.html
上一篇:打字稿回傳任何東西,但承諾
下一篇:L未定義,使用傳單
