2016-05-04 7 views
0

は私のコードです:callbackパラメータを持つ非同期Gulpプラグインの作成方法は?ここ

const through = require('through2'); 

function gulpPlugin() { 
    let filesCount = 0; 

    function transform(file, encoding, callback) { 
     if (file.stat.isDirectory()) 
      return callback(); 

     Promise.all([promise1(file), promise2(file)]).then(function(values) { 
      if (values[0] === values[1]) { 
       this.push(file); 
       ++filesCount; 
      } 
      callback(); 
     }); 
    } 

    function flush(callback) { 
     console.log('files:', filesCount); 
     callback(); 
    } 

    return through.obj(transform, flush); 
} 

transform()が非同期的に実行することが、しかし、これは動作しませんので、何のファイルがプラグインを通過しないことを意味します。変換」という根本的なstream.Transform主張()の

ドキュメント - コールバックを...クラスを変換し、この特定の中で行われなければならないものは何でも非同期 I/O、プロセスのことを行う、というように...必要があります - 提供されたチャンクの処理が完了したらこの関数を呼び出してください。 "

誰でも私が間違っていることを指摘できますか?

答えて

0

私のせいで、約束のコールバックのコンテキストが変更されているので、正しいコードは次のようになります。

const that = this; 

Promise.all([promise1(file), promise2(file)]).then(function(values) { 
    ... 
    that.push(file); 
}); 
関連する問題