// 模拟异步请求
function requestData(url) {
// 异步请求的代码会被放入到executor中
return new Promise((resolve, reject) => {
// 模拟网络请求
setTimeout(() => {
// 拿到请求的结果
resolve(url)
}, 2000);
})
}
// 每次请求结果处理后再次请求,实现下面写法
function* getData() {
const res1 = yield requestData("why")
const res2 = yield requestData(res1 + "aaa")
const res3 = yield requestData(res2 + "bbb")
const res4 = yield requestData(res3 + "ccc")
console.log(res4) //whyaaabbbccc
}
// 2> 自己封装了一个自动执行的函数
function execGenerator(genFn) {
const generator = genFn() //得到生成器
function exec(res) { //递归调用生成器
const result = generator.next(res)
if (result.done) { //判断是不是false
return result.value
}
result.value.then(res => { //继续调用
exec(res)
})
}
exec()
}
execGenerator(getData) //使用
(进阶)JavaScript中生成器实现异步请求处理方案
最新推荐文章于 2022-11-09 16:17:12 发布