当使用Promise.reject生成数组时,我得到了成功的响应

时间:2016-05-20 04:02:31

标签: javascript node.js ecmascript-6 es6-promise

我跟随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')]

1 个答案:

答案 0 :(得分:1)

感谢@loganfsmyth

我们可以修改

中的代码
yield [Promise.reject('Promise error')]

yield Promise.all([Promise.reject('Promise error')]);

会给出预期的结果。