我很担心将promise中的错误传递给catch处理程序。
使用下面的代码,如果promise2
导致错误,是否传递给底部的catch?另外,我在第一个“then”内返回作为承诺返回promise2
,还是返回doc
。
promise1(foo).then(doc =>{
return promise2(doc).then(doc => {
return doc
})
}).then(doc =>{
console.log(doc)
}).catch(err => {
console.error(err)
})
干杯
答案 0 :(得分:0)
then
可以返回一个承诺,但如果某些内容失败,则需要明确返回拒绝。在下面的示例中,changedDoc作为newDoc
then
promise1(foo).then(doc =>{
// changedDoc = doc.....
if (good things happened) {
return changedDoc;
} else {
return new Promise.reject("error");
}
}).then(newdoc =>{
console.log(newdoc)
}).catch(err => {
console.error(err)
})
答案 1 :(得分:0)
then
可以收到两个参数:
如果执行代码时出错,无论是在fullfilled中还是在被拒绝的情况下,执行将在下一次被拒绝的回调中继续。在您的代码中,第一个被拒绝的回调是catch
回调中指定的回调。如果该块不存在,则异常将继续冒泡到代码中的第一个catch
块。并且,如果没有这样的块,它将由浏览器处理,并向用户显示为错误。
如果您look at the documentation,您会发现catch
就像只接收第二个参数的then
一样:
Promise.prototype.then(onFulfilled, onRejected)
Promise.prototype.catch(onRejected)
您还可以查看this documentation on handling exceptions with promises。
Promises的整个想法是能够链接,以便成功传播到onFullfilled
回调,它可以无错误地运行,并为下一个onFullfilled
处理程序返回一些东西,或者运行错误,将由下一个onRejected
处理。错误可能是有目的的拒绝,也可能是未处理的异常。