Generator-Thunk-Promise之一

书写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已经实现优雅的异步操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值