簡體   English   中英

當使用Promise.reject產生yield數組時,我得到了成功響應

[英]When yield array with Promise.reject, I got success response

我正在從這里追蹤承諾產生者

請遵循以下代碼

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預期方式調用.catch

我需要做的是,我可以抓住Promise拒絕

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

感謝@loganfsmyth

我們可以從修改代碼

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

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

會給出預期的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM