カスタムインターバル関数を使用して、次回実行するまで関数の実行が最初に終了していることを確認しています。私はredisデータベースをチェックし、そのジョブがsidekiqによって実行されたかどうかを確認します。それが実行された場合、私はそれに書き込まれている場合、私はデータベースに要求を行う情報を取得するために、私は10回目の後に私は未定義のデータがない解決この関数を実行します。私が今解決している解決策をどうにかして改善できるかどうかは疑問です。インターバルが実行された後の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 'を' if(typeof t ===' undefined '|| t--> 0) 'に追加することでdone()を行うことができます。 – dandavis
@BenjaminGruenbaum解決は' bluebird '約束です。それはこのコードスニペットにあります。 –