当使用 Promise.reject 生成数组时,我得到了成功响应
When yield array with Promise.reject, I got success response
我正在关注来自 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')]
感谢@loganfsmyth
我们可以修改
中的代码
yield [Promise.reject('Promise error')]
至
yield Promise.all([Promise.reject('Promise error')]);
将给出预期的结果。
我正在关注来自 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')]
感谢@loganfsmyth
我们可以修改
中的代码yield [Promise.reject('Promise error')]
至
yield Promise.all([Promise.reject('Promise error')]);
将给出预期的结果。