Wie kann Grunt darauf warten, dass eine Aufgabe beendet wird, bevor eine andere ausgeführt wird?

8

Hier ist meine Gruntdatei und die Ausgabe .

Wie Sie in der Ausgabe sehen können, gibt es einige Probleme im Zusammenhang mit asynchronen Aufgaben:

  1. 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;
  2. 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;
  3. Wenn build später ausgeführt wird, hat jasmine nichts zu testen und ist daher nutzlos.

Gibt es eine Möglichkeit, dieses Verhalten zu beheben?

    
igorsantos07 31.03.2013, 22:50
quelle

2 Antworten

7

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:

%Vor%

- oder -

%Vor%     
dc5 20.05.2013, 03:05
quelle
0

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%     
Carlos Barcelona 05.10.2017 11:10
quelle