Sie können keine synchrone while
-Schleife verwenden, die auf ein asynchrones Ergebnis wartet. Der asynchrone Callback und in diesem Fall der Handler wird NIEMALS ausgeführt werden. Sie können Singlethread-Javascript einfach nicht auf diese Weise programmieren. Der Interpreter führt Ihre While-Schleife nur für immer fort und obwohl sich Ereignisse in der Ereigniswarteschlange häufen, um asynchrone Callbacks auszulösen, werden diese Ereignisse nie gewartet, weil Ihre while
-Schleife niemals stoppt. Sie können das asynchrone Verhalten in einer ereignisgesteuerten Umgebung mit nur einem Thread, wie z. B. Javascript, nicht auf diese Weise programmieren.
Stattdessen müssen Sie keine synchrone Schleifen verwenden. Die typische Lösung besteht darin, den Async-Aufruf durchzuführen und das Ergebnis auszuwerten. Wenn Sie die asynchrone Funktion an diesem Punkt erneut ausführen möchten, führen Sie einen Funktionsaufruf aus, um sie erneut auszuführen.
function runIt() {
return a().then(function() {
if (needToRunAgain) {
return runIt();
} else {
return someValue;
}
});
}
Dies wird wieder von der Asynchron-Betrieb aufrufen, wenn die Bedingungen, dass sich wünschen und die sich ergebende Versprechen an die Urverheißung-Kette, so dass der Anrufer genau wissen, wann das Ergebnis schließlich erfolgt. Sie rufen dann den Code wie folgt aus:
runIt(...).then(function(result) {
// result here
// you must use the async result here or call a function and pass the result
// to it. You cannot assign it to a higher scoped variable and expect
// other code that follows to be able to use it.
}, function(err) {
error here
});
die Rückrufe verwenden, die Ihnen zur Verfügung gestellt wurden. –