按照顺序执行异步函数
应用 generator 函数,按照顺序依次执行异步方法,打开谷歌浏览器控制台查看结果
/**
* 按顺序依次执行异步
* @author 大花猫花大
* @date 2020-07-14
* @param {array} processes = [function, ...]
* @returns {promise}
*/
function processRun(processes = []) {
return new Promise((resolve, reject) => {
//将 processes 数据转成 Generator 函数
function* gen(processes) {
let n = 0;
let result; //保留上一次 yield 的执行结果,传递给下一个 yield
while (processes[n]) {
result = yield new Promise((resolve, reject) => {
processes[n](resolve, reject, result);
});
n++;
};
return;
}
function run(gen, data) {
let next = gen.next(data);
if (next.done) {
resolve(next.value);
} else {
next.value.then(data => {
run(gen, data)
});
}
}
run(gen(processes));
});
}
//demo
processRun([
function (resolve, reject, data) {
setTimeout(() => {
console.log('step1', data);
resolve('step1返回值');
}, 1000);
},
function (resolve, reject, data) {
setTimeout(() => {
console.log('step2', data);
resolve(2);
}, 2000);
},
function (resolve, reject, data) {
setTimeout(() => {
console.log('step3', data);
resolve(3);
}, 1000);
}
]).then(res => {
console.log('run over.');
})
执行结果

浙公网安备 33010602011771号