咕嘟咕嘟流内部for循环无法正常工作(Gulp stream inside a for loop n

2019-10-22 23:41发布

我有类似于以下一饮而尽任务。 我通过努力环和追加一个字符串到页,并且还连接一个相应的文件。

gulp.task('loop', function() {

    for(i =0; i < 10; i++) {

        gulp.src('./build/ross/templates/pages/_page_home.liquid')
            .pipe(plugins.insert.append('Loop ' + i))
            // real example has concat here
            .pipe(plugins.addSrc('./src/page/_page' + i + '.liquid'))
            .pipe(plugins.concat('_page_home.liquid'))
            .pipe(gulp.dest('./build/ross/templates/pages/'));

    }

});

预计产量会是这样的

Loop 1
// _page1.liquid contents
Loop 2
// _page2.liquid contents
Loop 3
// _page3.liquid contents
and so on...

实际产量出现更像

// Original Page Contents here
Loop 9
// _page9.liquid contents

我做了fs.readFile在环路中的原始文件和输出的数据,它是只输出原始页面的内容,而非连结文件或我想追加的字符串。

我还做了console.log(i)内,它显示正确的号码1,2,3,4,5,6,7,8,9 。 我不知道这事做与gulp.src()

更新:有时看起来输出的内容实际上将有_page#的部分.liquid内容。 这是一个有点不一致。

有没有更好的方式与一饮而尽做到这一点还是我只是做错了什么?

Answer 1:

得到它从人一些帮助在freenode上的IRC #gulpjs工作。

它使用stream-to-promisebluebird

var s2p = require('stream-to-promise');
var Promise = require('bluebird');

gulp.task('loop2', function() {
    // don't forget your `var`s!
    var buildIt = function(i){
        return gulp.src('./build/ross/templates/pages/_page_home.liquid')
            .pipe(plugins.insert.append('Loop ' + i))
            .pipe(gulp.dest('./build/ross/templates/pages/'))
            .on('end', function(){ console.log(i + ' -- done')});
    }

    var indexes = [];

    for(var i = 0; i < 10; i++) {
        indexes.push(i);
    }

    // // sequence them
    indexes.reduce(function(p, index){
        return p.then(function(){
            return s2p(buildIt(index));
        });
    }, Promise.resolve());

});


文章来源: Gulp stream inside a for loop not working properly