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);