var genAsyncTask2 = (val, time) => {
return () => {
return new Promise(function (resolve, reject) {
let timer = setTimeout(() => {
clearTimeout(timer);
resolve(val);
}, time);
});
}
}
// 任务队列
var taskArr = [
genAsyncTask2('第1个异步任务,时间为2秒', 2000), genAsyncTask2('第2个异步任务,时间为1秒', 1000),
genAsyncTask2('第3个异步任务,时间为0.8秒', 800), genAsyncTask2('第4个异步任务,时间为2.5秒', 2500)
];
function *genFun(taskArr){
for(let i = 0 , len = taskArr.length; i < len; i++){
yield taskArr[i]().then(res => {
console.log('genSync', res);
return res;
});
}
}
/**
* 自动执行generate函数的next,并保证执行顺序
* @param generateFn generate函数
* @param params 执行generate函数所需参数
*/
function generateAutoExec(generateFn, ...params) {
var g = generateFn(...params);
var next = function (res) {
if (res.done || typeof res.value == 'undefined') return res.value;
res.value.then((data) => {
console.log('data', data);
next(g.next(data));
}).catch((err) => {
console.error(err);
next(g.throw(err));
});
}
next(g.next());
}
generateAutoExec(genFun, taskArr);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。