Hier ist meine Gruntdatei und die Ausgabe .
Wie Sie in der Ausgabe sehen können, gibt es einige Probleme im Zusammenhang mit asynchronen Aufgaben:
imagemin
wird aufgerufen und der nächste kommt geradeaus. Dies führt dazu, dass seine Ausgabe am Ende der Aufgaben angezeigt wird, was ziemlich unordentlich ist; build
, was eine benutzerdefinierte Aufgabe ist, verwendet var done = this.async()
und ruft done()
auf, nachdem der Befehl beendet wurde; das funktioniert jedoch nur korrekt, wenn ich die Aufgabe alleine ausführe; Wenn Sie es mit anderen Aufgaben ausführen, wird auch async ausgeführt; build
später ausgeführt wird, hat jasmine
nichts zu testen und ist daher nutzlos. Gibt es eine Möglichkeit, dieses Verhalten zu beheben?
Ich glaube, Ihr Problem besteht bei dieser Aufgabe:
%Vor%Wenn Sie mehrere Ordner haben, werden sowohl async () als auch done () mehrmals aufgerufen. Async wird als einfaches Flag (true / false) implementiert und soll einmal aufgerufen werden. Der erste Aufruf von done () ermöglicht das Ausführen von Folgeaufgaben.
Es gibt viele Möglichkeiten, die Anrufe asynchron und außerhalb der Schleife zu verschieben. Eine schnelle Google-Suche auf etwas wie: nodejs how to callback when a series of async tasks are complete
gibt Ihnen einige zusätzliche Optionen. Ein paar schnelle (und schmutzige) Beispiele:
- oder -
%Vor%Wie Sie in der Grunt-Dokumentation nachlesen können:
Wenn eine Aufgabe asynchron ist, muss diese.async-Methode zur Anweisung aufgerufen werden Grunt warten. Es gibt ein Handle für eine "Done" -Funktion zurück, die es sein sollte aufgerufen, wenn die Aufgabe abgeschlossen ist.
Und ein kurzes Beispiel wäre ähnlich wie:
%Vor%Tags und Links javascript gruntjs node.js asynchronous