2016-05-05 18 views
-1

単純な例:2つのgulpタスクがあります(2番目のタスクは最初のタスクから評価される必要があります)。 setTimeout):遅延されたgulpタスクの戻り値を他の1つで正しく使用する方法

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"]); 

以下に結果として得られる:

[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!!!

答えて

0

あなたは、あなたのタスクは、あなたの例ではあまりにも早く起こるcbを呼び出すことによって終了がぶ飲みを言っています。ただし、文字列とグッの配列とcbを呼んでいることは、ある種の流れを必要と

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"]); 

:あなたはタイムアウト内にcb呼び出しを移動した場合、それは、タスクを完了するのを待ちます。共有変数に値を書き込んだり、データを使ってストリームを作成してタスク間をやりとりすることができます。

+0

よく壊れています。エラーが1秒後に '[18:43:58]'でエラーします。 [18:43:58]エラー:VovanとAlex ' –

+0

これはgulpがストリームを期待しているからです文字列の配列を渡します。私は答えの終わりにそれを言いました。 – ssube

+0

..だから、どのようなコードがそのように見えますか? –

関連する問題