美文网首页
gulp 任务同步异步的思考

gulp 任务同步异步的思考

作者: 利312 | 来源:发表于2017-02-07 18:23 被阅读188次

    js构建的时候,经常出现需要处理异步同步的,比如js:release等任务需要等待clean任务完成才可以;
    很容易想到使用 gulp.task的第二个数组参数;

    但如果第二个参数的数组需要都等待clean完成呢?也就是js:release,css:release,html:release这些任务都需要先等待clean完成才能去并行运行,这个时候下面的例子就给出了方案
    看官网的例子: https://github.com/gulpjs/gulp/blob/master/docs/API.md

    var gulp = require('gulp');
    
    // takes in a callback so the engine knows when it'll be done
    gulp.task('one', function(cb) {
        // do stuff -- async or otherwise
        cb(err); // if err is not null and not undefined, the run will stop, and note that it failed
    });
    
    // identifies a dependent task must be complete before this one begins
    gulp.task('two', ['one'], function() {
        // task 'one' is done now
    });
    
    gulp.task('default', ['one', 'two']);
    

    其中 gulp.task('default', ['one', 'two']);gulp.task('default', ['two']);是一样的了。
    关键点是理解,task如果返回满足是callback,promise,stream三种情况,则一定要等待第二个参数的数据的任务执行完,才会执行当前的任务(经测试,如果有多个任务都依赖同一个任务,这同一个任务只会执行一次)。
    这样就有下面的方案:

    gulp.task('clean',function(){
      ... //需要满足三个条件之一
    });
    gulp.task('js:release',['clean'],function(){});
    gulp.task('css:release',['clean'],function(){});
    gulp.task('html:release',['clean'],function(){});
    gulp.task('default',['js:release','css:release','html:release'],function(){})
    

    相关文章

      网友评论

          本文标题:gulp 任务同步异步的思考

          本文链接:https://www.haomeiwen.com/subject/ufemittx.html