Ich benutze die benutzerdefinierte Intervallfunktion, um sicherzustellen, dass die Ausführung der Funktion zuerst beendet wurde, bis sie das nächste Mal ausgeführt wird. Im Allgemeinen mache ich folgendes Ich überprüfe die redis-Datenbank und überprüfe, ob der Job von sidekiq ausgeführt wurde. Wenn es ausgeführt wurde, erstelle ich eine Anfrage an die Datenbank, um die Informationen zu holen, wenn es darauf geschrieben wurde, ich führe diese Funktion 10 Mal aus, wenn nach dem 10. Mal keine Daten aufgelöst undefiniert sind. Ich frage mich, ob die Lösung, die ich gerade habe, irgendwie verbessert werden kann.Javascript Rückruf nach Ablauf des Intervalls
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);
Was ist 'resolve'? –
Sie können ein "done()" durch Hinzufügen eines 'else' zu' if (typeof t === 'undefiniert' || t--> 0) ' – dandavis
@BenjaminGruenbaum Auflösung ist 'Bluebird' Versprechen habe ich nicht enthalten es in diesem Code-Snippet. –