我跟随here
的承诺生成器请按照以下代码
function async(makeGenerator){
return function () {
var generator = makeGenerator.apply(this, arguments);
function handle(result){
// result => { done: [Boolean], value: [Object] }
if (result.done) return Promise.resolve(result.value);
return Promise.resolve(result.value).then(function (res){
return handle(generator.next(res));
}, function (err){
return handle(generator.throw(err));
});
}
try {
return handle(generator.next());
} catch (ex) {
return Promise.reject(ex);
}
}
}
async(function*(){
yield [Promise.reject('Promise error')]
})()
.then(function(){
console.log('success')
})
.catch(function(data){
console.log('error',data)
})
其输出为success
,而不是error
如果我执行yield Promise.reject('Promise error')
,则按预期调用.catch
。
我需要做什么,所以我可以用
捕捉Promise拒绝 yield [Promise.reject('Promise error')]
答案 0 :(得分:1)
感谢@loganfsmyth
我们可以修改
中的代码yield [Promise.reject('Promise error')]
到
yield Promise.all([Promise.reject('Promise error')]);
会给出预期的结果。