// 异步迭代生成器
// 生成器+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) // 输出丢回来的错误
}
js-gerenator-async异步迭代器错误处理及+promise
最新推荐文章于 2024-10-26 21:04:55 发布