链式顺序任务[重复]

Posted

技术标签:

【中文标题】链式顺序任务[重复]【英文标题】:Chain sequential tasks [duplicate] 【发布时间】:2014-03-23 13:05:09 【问题描述】:

我有 3 个任务要处理,当这 3 个任务完成后,我想执行以下操作:

    将三个文件合并在一起 丑化 写入磁盘

对于Grunt,我经历了漫长的过程。这是我尝试过的Gulp

gulp.task('libs', function () 
return gulp.src('js/libs/*.js')
        .pipe(concat('01.libs.js', newLine: ';'))
        .pipe(gulp.dest('min'));
);

gulp.task('plugins', function () 
    return gulp.src('js/plugins/*.js')
            .pipe(concat('02.plugins.js', newLine: ';'))
            .pipe(gulp.dest('min'));
);

gulp.task('apps', function () 
    return gulp.src('js/apps/**/*.js')
            .pipe(concat('03.apps.js', newLine: ';'))
            .pipe(gulp.dest('min'));
);

gulp.task('scripts', ['libs', 'plugins', 'apps'], function () 
    return gulp .src('min/*.js')
            .pipe(concat('testFile.js', newLine: ';\r\n'))
            .pipe(rename(suffix: '.min.v' + pkg.version ))
            .pipe(gulp.dest('min'))
            .pipe(notify( message: 'Scripts minified'));
);

这可行,但我只想流式传输输出,而不是只写出 3 个中间文件然后连接它们。

于是我尝试了:

function libs () 
    return gulp.src('js/libs/*.js')
            .pipe(concat('01.libs.js', newLine: ';'));


function plugins () 
    return gulp.src('js/plugins/*.js')
            .pipe(concat('02.plugins.js', newLine: ';'));


function apps () 
    return gulp.src('js/apps/**/*.js')
            .pipe(concat('03.apps.js', newLine: ';'));

那么我的build 将是:

gulp.task('build', function () 
    return libs()
        .pipe(plugins())
        .pipe(apps())
        .pipe(concat('TestFile.js', newLine: ';\r\n'))
        .pipe(rename(suffix: '.min.v' + pkg.version ))
        .pipe(gulp.dest('min'));
);

这不起作用。

所以我尝试了Q

function allOfThem () 
    return Q.all(libs(), plugins(), apps());


gulp.task('build', function () 
    return allOfThem().then(function (one, two, three) 
        console.log(one, two, three);
    );
);

我猜这可行,但then 的回调中没有数据。

我迷路了。实现这一目标的最佳方法是什么?

【问题讨论】:

【参考方案1】:

使用 event-stream.merge

var es = require('event-stream');
gulp.task('build', function () 
    return es.merge(libs(), plugins(), apps())
        .pipe(concat('TestFile.js', newLine: ';\r\n'))
        .pipe(rename(suffix: '.min.v' + pkg.version ))
        .pipe(gulp.dest('min'));
);

【讨论】:

以上是关于链式顺序任务[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用WorkManager执行后台任务(下)

如何在后台线程中按顺序运行任务[重复]

支付宝链式支付成功后执行任务

“异步任务然后等待任务”与“任务然后返回任务”[重复]

游戏开发实战Unity从零做一个任务系统,人生如梦,毕业大学生走上人生巅峰(含源码工程 | 链式任务 | 主线支线)

游戏开发实战Unity从零做一个任务系统,人生如梦,毕业大学生走上人生巅峰(含源码工程 | 链式任务 | 主线支线)