2015-09-08 2 views
1

У меня есть поток файлов, и в какой-то момент мне нужно приостановить мой поток, дождаться его завершения и буферов, а затем продолжить.gulp pause и buffer stream

Пример:

var eventStream = require('event-stream') 
gulp.task('test',() => { 
    eventStream.readArray([1, 2, 3, 4, 5]) 
     .pipe(gulpTap((data) => { 
      console.log('d1:', data); 
     })) 
     .pipe(gulpTap((data) => { 
      console.log('d2:', data); 
     })) 
     .on('end', function() { 
      console.log('ended'); 
     }); 
}) 

печатает:
d1 1
d2 1
d1 2
d2 2
d1 3
d2 3
закончился

, когда я хочу его чтобы быть следующим:
d1 1
d1 2
d1 3
d2 1
d2 2
d2 3

Причина здесь в том, что я хочу, чтобы собрать некоторые данные из всех файлов в одном объекте, а затем предоставить его другие объекты, поэтому мне нужно какое-то синхронизация в середине цепи трубы

ответ

0

Вы можете сделать это с помощью through2, например:

const eventStream = require('event-stream'); 
const through = require('through2'); 

gulp.task('test',() => { 
    const input = []; 

    eventStream.readArray([1, 2, 3, 4, 5]) 
     .pipe(through.obj((data, enc, done) => { 
      // Save data and remove from stream 
      input.push(data); 

      console.log('d1:', data); 
      return done(); 
     }, function(done) { 
      // Return "buffered" data back to stream 
      input.forEach(this.push.bind(this)); 

      return done(); 
     })) 
     .pipe(through.obj((data, enc, done) => { 
      console.log('d2:', data); 
      return done(null, data); 
     })) 
     .on('end', function() { 
      console.log('ended'); 
     }); 
}); 

Реальный пример: https://github.com/sirlantis/gulp-order

Смежные вопросы