我正在使用自定義間隔函數來確保函數執行已經完成,直到下一次運行。一般情況下,我會執行以下操作,檢查redis數據庫並檢查該工作是否由sidekiq執行。如果它被執行,我向數據庫發出一個請求,如果它被寫入到數據庫中,那麼我運行這個函數10次,如果在第10次之後沒有數據,我解析undefined。我想知道我現在所擁有的解決方案是否可以改進。執行間隔後的JavaScript回調
const interval = (func, wait, times) => {
const interv = function(w, t){
return() => {
if (typeof t === 'undefined' || t-- > 0) {
setTimeout(interv, w);
try {
func.call(null);
}
catch (e) {
t = 0;
throw e.toString();
}
}
};
}(wait, times);
setTimeout(interv, wait);
};
let intervalCount = 0;
interval(() => {
intervalCount++;
redisClient.lrange('queue:default', 0, -1, (err, results) => {
const job = results.find((element) => { return JSON.parse(element).jid === jobId; });
if (job === undefined) {
checkDatabase(personId).then((result) => {
if (result) {
resolve(checkDatabase(personId));
} else if (intervalCount >= 10) {
resolve(undefined);
}
});
}
});
}, 1500, 10);
什麼是'決定'? –
你可以通過添加一個'else'來做一個「done()」if(typeof t ==='undefined'|| t - > 0)' – dandavis
@BenjaminGruenbaum決心是'藍鳥'承諾我沒有包括它在這個代碼片段中。 –