Ich versuche, die Funktion zu schreiben, die alle Ergebnisse von asynchronen Funktionen zurückgibt und einen Rückruf ausführt, der in ein Array drückt und das Ergebnis jeder asynchronen Funktion protokolliert.
Als Kellner, der alle Gerichte bringt, wenn sie fertig sind. Ich verstehe nicht, wie man die Kind-Argumente erhält, die als Ergebnis zurückgegeben werden sollen. Der Code der Aufgabe und meine nicht funktionierende Lösung ist unten:
Die Aufgabe:
%Vor%Meine nicht funktionierende Lösung:
%Vor%Problem ist dieser Teil:
%Vor% was eine synchrone Funktion ist. Wenn Sie if(i == 2)
überprüfen, überprüfen Sie im Grunde, dass Sie alle asynchronen Funktionen aufgerufen haben, aber sie haben noch nichts zurückgegeben. Sie wissen also nur, dass die Funktionen aufgerufen wurden, aber result.arr
ist noch nicht ausgefüllt.
Sie müssen den doneAll(result.arr)
Ausdruck in child
Callback verschieben, dann wird er von der async Funktion aufgerufen, da er das Ergebnis zurückgibt.
Die einfachste Lösung, die ich mir vorstellen kann, ist das Schreiben von child
as
und in Ihrer waiter
Funktion Ergebnisobjekt verbessern
Das soll funktionieren, hat aber einen Nachteil - die Position der Ergebnisse hält die Position der Funktionen nicht in funcArray
, die Position der Ergebnisse ist nach der Dauer der asynchronen Funktion sortiert, einfach die erste aufgelöste würde das erste Ergebnis usw. annehmen Dies ist ein Problem. Sie müssen auch einen Index an Ihre child
-Funktion übergeben, um das Ergebnis an einer wertvollen Position im Ergebnisarray zu speichern, und dann würde die Überprüfung durch arr.length
nicht funktionieren, weil JS-Array die Länge als höchsten Index + 1 zurückgibt Wenn Ihre letzte funcArray
zuerst erfüllt würde, würde sie den letzten Index füllen und die Länge von result.arr
wäre gleich this.allCount
. Um die Reihenfolge des Ergebnisses gleich dem funcArray
zu halten, müssen Sie die Nummer speichern der zurückgegebenen Ergebnisse als eine andere Zahl, erhöhen Sie diese Zahl mit jedem neuen Ergebnis und vergleichen Sie diese Zahl mit allCount
.
Oder verringern Sie allCount wie folgt
%Vor% Und ändern Sie Ihre Funktion waiter
Warum nicht Versprechen ?
%Vor% Ihre Funktion waiter
:
Und du kannst es so benutzen
%Vor%Viel einfacher zu verstehen. Richtig?
Tags und Links javascript