2016-05-04 2 views
0

Вот мой код:Как создать асинхронный плагин 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); 
} 

Имея параметр callback означает, что transform() может выполняться асинхронно, однако это не работает, так что ни один файл не получает передается через плагин.

Документация по нижележащих stream.Transform утверждает, что «преобразование() - должны делать все, что должно быть сделано в этом конкретном Transform класс ... сделать асинхронный I/O, процесс вещей, и так далее ... Обратный вызов - вызовите эту функцию, когда вы закончите обработку поставляемого блока ».

Может ли кто-нибудь указать мне, что я делаю неправильно.

ответ

0

Моя вина, контекст в обещание обратного вызова изменилось, поэтому правильный код должен быть:

const that = this; 

Promise.all([promise1(file), promise2(file)]).then(function(values) { 
    ... 
    that.push(file); 
}); 
Смежные вопросы