js-gerenator-async异步迭代器错误处理及+promise

// 异步迭代生成器
// 生成器+promise模式
const req = (t = 300, res = 1) => new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log('req end ' + t)
    if(res) {
      resolve(t)
    } else {
      reject(false)
    }
  }, t)
})

function *foo() {
  try{
    // 生成器+promise模式
    // 监听promise的决议,yield一个promise。
    yield req(300, 1) // 同步捕获异步错误。
  }catch(e) {
    console.log(e)
  }
  let x = yield "hello"
  // try{ // 处理错误,下面continue会继续执行。
  //   yield x.toLowerCase()
  // } catch(e) {
  //   console.log(e)
  // }
  yield x.toLowerCase() // 不处理错误,下面不会走。
  console.log('continue...')
}

// 1. 处理异步错误(迭代器)
let it = foo()
it.next().value.then(r => {
  console.log(r)
}).catch(e => {
  console.log(e)
})

// 2. 处理同步错误(迭代器)
it.next()
try {
  // it.next(22)
  it.next('abc')
} catch(e) {
  // console.log(e)
}

// 3. 处理错误(生成器),生成器不处理则返回给迭代器处理
try {
  // it.next() // continue...
  // 丢一个错误给生成器处理
  it.throw('it error') // 不会走 continue... 
}catch(e) {
  // console.log(e) // 输出丢回来的错误
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值