从那时拒绝承诺()

时间:2017-04-09 12:21:26

标签: javascript ecmascript-6 promise es6-promise

你怎么能拒绝then()内的承诺?

例如:

Promise.all(promiseArr).then(()=>{
  if(cond){
    //reject
  }
}).catch(()=>{ /*do something*/ });

我发现的唯一相关问题是: How to reject a promise from inside then function但是从2014年开始,所以必须有一个更好的方法来支持ES6。

2 个答案:

答案 0 :(得分:7)

ES6 / ES2015仍然是JavaScript,并没有提供任何有关承诺拒绝的新内容。事实上,本机承诺 ES6。

要么是

promise
.then(() => {
  return Promise.reject(...);
})
.catch(...);

promise
.then(() => {
  throw ...;
})
.catch(...);

并且throw更加惯用(通常更高效)。

对于其他承诺实施可能不是这样。例如。在AngularJS throw$q.reject()中并不是一回事。

答案 1 :(得分:1)

我发现(经过数小时的摸索之后),如果throw位于setTimeout(() => throw new Error('description'))之类的异步方法中,它将被视为Unhandled Exception并且不会结束在您的.catch()块中(您只会在控制台窗口中看到它)-请参阅this article,其中我发现了throwPromise.reject之间的区别。