共计 876 个字符,预计需要花费 3 分钟才能阅读完成。
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); |
正文完
发表至: javascript
2021-07-21