2016-05-05 4 views
-1

Ein einfaches Beispiel: Ich habe 2 Schluck Aufgabe (zweite benötigt von der ersten bewertet), kann aber nicht in zweiter Sekunde richtig (während der ersten Ausführung der Aufgabe mit setTimeout):So verwenden Sie den zurückgegebenen Wert aus der verzögerten Schluckaufgabe in einem anderen

var gulp = require("gulp"); 

var values = undefined; 

gulp.task("one", function(cb) { 
    console.log(values); 
    setTimeout(function() { 
     console.log('First finnished!!!'); 
     values = "Vovan and Alex"; 
    }, 1000); 
    cb(values); 
}) 

gulp.task("two", ["one"], function() { 
    console.log(values); 
    console.log("Second's done!") 

}) 

gulp.task("default", ["one", "two"]); 

Resultierende in folgenden:

[18:24:26] Using gulpfile ~/workspace/gulpfile.js [18:24:26] Starting 'one'... undefined [18:24:26] Finished 'one' after 1.58 ms [18:24:26] Starting 'two'... undefined Second's done! [18:24:26] Finished 'two' after 302 μs [18:24:26] Starting 'default'... [18:24:26] Finished 'default' after 17 μs First finnished!!!

Antwort

0

Sie sagen schluck, die Ihre Aufgabe durch den Aufruf cb fertig, die zu früh in Ihrem Beispiel passiert. Wenn Sie den cb Anruf innerhalb der Timeout bewegen, wird es warten, bis die Aufgabe zu beenden:

var gulp = require("gulp"); 

var values = undefined; 

gulp.task("one", function(cb) { 
    console.log(values); 
    setTimeout(function() { 
     console.log('First finnished!!!'); 
     values = "Vovan and Alex"; 
     cb(values); 
    }, 1000); 
}) 

gulp.task("two", ["one"], function() { 
    console.log(values); 
    console.log("Second's done!") 

}) 

gulp.task("default", ["one", "two"]); 

Allerdings sind Sie cb mit einer Reihe von Strings und schluck Aufruf erfordert einen Strom von einer Art. Sie könnten den Wert in eine gemeinsam genutzte Variable schreiben oder einen Stream mit Ihren Daten erstellen, um sie zwischen Aufgaben zu übertragen.

+0

gut .. es bricht mit Fehler '[18:43:58] 'ein' Fehler nach 1 s [18:43:58] Fehler: Vovan und Alex' –

+0

Das ist, weil Schluck erwartet einen Stream und du bist ein Array von Strings übergeben. Ich habe das am Ende der Antwort erwähnt. – ssube

+0

.. so, wie Code könnte dann aussehen? .. –

Verwandte Themen