当使用 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')]);

将给出预期的结果。