你怎么能拒绝then()
内的承诺?
例如:
Promise.all(promiseArr).then(()=>{
if(cond){
//reject
}
}).catch(()=>{ /*do something*/ });
我发现的唯一相关问题是: How to reject a promise from inside then function但是从2014年开始,所以必须有一个更好的方法来支持ES6。
答案 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,其中我发现了throw
和Promise.reject
之间的区别。>