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