Ich habe einige Code, der in einem promise
verpackt ist. Dieser Code geht und bearbeitet einige Datensätze in einem Remote-DB und kehrt mit der Anzahl der bearbeiteten Datensätze zurück. Wenn die Anzahl der bearbeiteten Datensätze größer als 0
ist (d. H. Etwas Arbeit wurde getan), würde ich die gleiche Methode immer wieder ausführen, bis ich eine 0
zurückbekomme (d. H., Es müssen keine Datensätze mehr bearbeitet werden).Wie kann ich das gleiche Versprechen je nach dem Ergebnis des vorherigen Laufs erneut ausführen?
Ich habe verschiedene Wege ausprobiert, aber sie alle enden nicht (d. H. Die Auflösung wird nicht aufgerufen) oder sie laufen nicht richtig.
Erste Version Ich habe versucht:
const doEdits =() => {
return new Promise((resolve, reject) => {
someDB.performEdits()
.then(count => {
if (count > 0) {
doEdits()
} else {
resolve()
}
})
.catch(reject)
})
}
return new Promise((resolve, reject) => {
someDB.init()
.then(doEdits)
.catch(reject)
})
Zweite Version Ich habe versucht:
const doEdits =() => {
return new Promise((resolve, reject) => {
someDB.performEdits()
.then(count => {
resolve(count)
})
.catch(reject)
})
}
return new Promise((resolve, reject) => {
someDB.init()
.then(doEdits)
.then(count => {
if (count > 0) {
return doEdits() // 'doEdits()' did not work...
} else {
resolve()
}
})
.catch(reject)
})
Sämtliche Vorschläge sind willkommen.
Sie lösen nicht nach 'doEdits' auf. Versprechen müssen immer am Ende "aufgelöst" oder "abgelehnt" werden. – Eric
@ErikKralj, wenn Sie über das erste Beispiel sprechen, dann nach dem 'if (count> 0)', dann müsste ich ein '.then (...)' danach machen und das zurückgegebene Ergebnis überprüfen und mach es immer wieder etc ... –