(进阶)JavaScript中生成器实现异步请求处理方案

// 模拟异步请求
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)         //使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值