摘要:
一、自己写流程控制,提高代码灵活性
二、使用第三方的插件,使用方便效率高
内容:
一、自己写流程控制
1、自己写顺序执行
function makeFunc(time){
return () =>{
setTimeout(() => {
console.log(`${time} ms later print`);
next();
}, time);
}
}
let tasks = [makeFunc(10),makeFunc(20),makeFunc(30)];
function next(err){
if(err) throw err;
let task = tasks.shift();
if(task) task();
}
next();
解释:将多层嵌套写成函数,避免代码混乱;使用任务队列,可以让看代码的人一目了然。
2、自己写并行执行。
function makeFunc(time){
return () =>{
setTimeout(() => {
console.log(`${time} ms later print`);
check();
}, time);
}
}
function check(){
count++;
if(count == tasks.length){
console.log("ok");
console.timeEnd("start");
}
}
let count = 0;
console.time("start");
let tasks = [makeFunc(10),makeFunc(20),makeFunc(30)];
tasks.filter(task => task)
.forEach(task => {
task();
})
二、如何使用第三方插件实现顺序和并行
1、顺序执行
const async = require('async');
function makeFunc(time){
return (callback)=>{
setTimeout(() => {
console.log(`${time} later exec`);
callback();
}, time);
}
}
async.series([
makeFunc(10),
makeFunc(20),
makeFunc(30)
],function(err,result){
if(err) console.log(err.message);
console.log(result);
})
结果:10 later exec
test.js:6
20 later exec
test.js:6
30 later exec
test.js:6
Array(3) [undefined, undefined, undefined]
2、并行执行
const async = require('async');
function makeFunc(time){
return (callback)=>{
setTimeout(() => {
console.log(`${time} later exec`);
callback();
}, time);
}
}
console.time('parellel')
async.parallel([
makeFunc(10),
makeFunc(20),
makeFunc(30)
],(err,result) =>{
if(err) console.log(err.message);
console.log(result);
console.timeEnd('parellel');
})
结果:
10 later exec
test.js:6
20 later exec
test.js:6
30 later exec
test.js:6
Array(3) [undefined, undefined, undefined]
test.js:18
parellel: 43.01100015640259ms
test.js:19
parellel: 43.283ms