2016-05-04 7 views
0

Hier ist mein Code:Wie erstelle ich ein asynchrones Gulp-Plugin?

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); 
} 

impliziert die callback Parameter hat, dass die transform() asynchron laufen kann, aber das funktioniert nicht, so dass keine Datei über das Plugin übergeben wird. in diesem speziellen Transform-Klasse getan werden muss ... tun asynchron tun, was I/O, Prozess Dinge, und so weiter ... Rückruf soll -

Dokumentation über die zugrunde liegenden stream.Transform behauptet, dass „transform() - Rufen Sie diese Funktion auf, wenn Sie den gelieferten Chunk fertig bearbeitet haben ".

Kann mir jemand zeigen, was ich falsch mache.

Antwort

0

Meine Schuld ist der Kontext, in dem Versprechen Rückruf geändert, so muss die korrekte Code sein:

const that = this; 

Promise.all([promise1(file), promise2(file)]).then(function(values) { 
    ... 
    that.push(file); 
}); 
Verwandte Themen