Dies ist meine Forderung mit AngularJS:Schleife warten, bis alle Versprechungen vor der nächsten Iteration gelöst werden
for (var i = 0, len = self.Scope.data.length; i < len; i++)
{
var data = self.Scope.data[i];
var self = this;
//First asynchronous function
self.EcritureService.createNewData(data).then(() => {
})
//Second asynchronous function
self.OperationService.getOperation(data.idOperation).then((operation) => {
})
//Third asynchronous function
self.AccountService.getAccount(data.codeCompte).then((compte) => {
currentAccount = compte;
currentAccount.montant = currentAccount.montant+data.montant;
})
//Fourth one relies on the third result, So it must be executed sequentially
self.AccountService.updateAccount(currentAccount).then(() => {
})
}
// After all fetch loop's promises are resolved I want to execute some instructions here for to update the operation retrieved in the second function.
Ich mag diese Schleife Iterators warten, bis alle Versprechen, bevor er auf dem nächsten Schritt gelöst werden, als sicher, dass alle Arbeiten fertig sind, zum letzten Funktionalität zu bewegen, die
außerhalb der Schleife bloc residieren
Können Sie * bitte * Ihren Einzug korrigieren? – Bergi
JavaScript ist single-threaded. Die 'for'-Schleife wird abgeschlossen **, bevor eine der ** Versprechungen aufgelöst wird. Die Schleife kann nicht zum Warten gebracht werden. – georgeawg
Sie können Ihre Logik so schreiben, als wäre sie synchron, setzen Sie sie in Funktion und führen Sie diese Funktion über den synchronen Executor [nsynjs] (https://github.com/amaksr/nsynjs) aus. Siehe die Funktion "process()" in einem ähnlichen Beispiel hier: https://github.com/amaksr/nsynjs/blob/master/examples/browser-ajax-seq.js – amaksr