// 用生成器+promise实现async,await function run(gen) { let args = [].slice.call(arguments, 1), it it = gen.apply(this, args) return Promise.resolve().then(function handleNext(value) { var next = it.next(value) return (function handleResult(next) { if (next.done) { return next.value } else { return Promise.resolve(next.value) // 对值进行包装,确保是一个promise .then(handleNext, function handleErr(err) { //只是在链上把异常捕获并传递下,程序继续正常执行 return Promise.resolve( it.throw(err) ).then(handleResult) }) } })(next) }) } function *f() { let a = yield new Promise(function (reolve, reject) { setTimeout(() => { reolve(3) }, 1000) }) throw new Error('tt') let b = a * 3 console.log(a,33) return b // console.log(b, 'b') } run(f).then(function fulfilled(res) { console.log(res, 55) }, function reject(reason) { console.log(reason) })
用生成器+promise实现async,await
猜你喜欢
转载自blog.csdn.net/zsnpromsie/article/details/80084498
今日推荐
周排行