异步串行

问题需求

执行命令行

  1. gitbook build
  2. git add . && git commit -m "k-trainer" && git push origin master

利用nodejs的exec

exec是个异步任务

但是现在需要串行执行

exec的代码

 var child = exec(element.command, element.options,  (error, stdout, stderr) => {

});

queue

这个是最终的解决方案,所以放在前面

利用https://www.npmjs.com/package/queue

queue,实现极其简单,充分利用nodejs的event模块

//queue,默认是N多个任务可并行的,如果希望串行,则设置concurrency为1
var q = queue({
    concurrency: 1
});
[shell1,shell2].forEach(function(element){
    q.push(function(next){
        exec(element.command, element.options, (error, stdout, stderr) => {
        next();//通知执行下一个任务
        });
    }
})

promise

var promise = Promise.resolve()

[shell1,shell2].forEach(function(element){
    promise = promise.then(function(){
        return new Promise(function(resolve, reject){  
            exec(element.command, element.options, (error, stdout, stderr) => {
                resolve();//通知执行下一个任务
            });
        });
    })
})

参考链接

  1. 利用reduce和foreach进行异步串行: https://simplyy.space/article/580873968ad7cc6a02e64172#reduce 版本
© 404mzk all right reserved,powered by Gitbookhttp://blog.404mzk.com 该文件修订时间: 2017-03-13 12:03:03

results matching ""

    No results matching ""