书写Generator函数异步操作跟同步一样–封装–优雅地实现异步
学习js时看了很多关于Generator函数的知识,虽然知识看懂了但用起来却不是很方便。
当Generator函数需要多次执行异步操作,尝试为其提供一个入口函数进行流程的管理。
放代码:
// Generator函数Example
function* myGenerator() {
let result1 = yield 1 // axios.get('/yourpath1')
// console.log('result1 ', result1 )
let result2 = yield 2 // axios.get('/yourpath2')
// console.log('result2 ', result2 )
// ...继续跟同步似的写下去
return { result1, result2 }
}
// 通过入参generaotr,管理Generator函数执行流程
function runMyGenerator(generaotr, value){
const output = generaotr.next(value) // { value: yield右侧返回结果, done: Boolean(是否结束)
// console.log('output', output)
if (output.done){
return output.value
} else {
return runMyGenerator(generaotr, output.value)
}
}
// 执行
const result = runMyGenerator(myGenerator())
// console.log('result', result)
结果:
将Generator函数返回的指针对象传入方法runMyGenerator
,通过递归的方式执行next()
操作优雅的用类似同步的代码实现异步操作。
以上仅为本人学习Generator函数之余的思考,实用性待讨论,仅供参考,不足之处多多指教。
async
+ await
已经实现优雅的异步操作。