我被问到.catch
处理的承诺,现在我很好奇我是否正确。我相信,在下面的代码中,如果内部承诺中存在错误,那么它将被我在调用承诺上的.catch
捕获。我被问到的问题让我怀疑我的理解,虽然我不认为我应该有一个嵌套的捕获,但我不确定替代解决方案是什么。我在节点FYI中使用本机承诺。
promise1(param1)
.then((status) => {
if (status !== 200) {
return 'Error!';
}
promise2(param1, param2)//param2 defined out of this scope
.then((result) => {
return 'Yay, result!';
})
})
.catch((error) => {
return JSON.stringify({'Caught Error': error});
})
我曾经考虑过做这样的事情但是promise2需要第二个参数:
promise1(param1)
.then((status) => {
if (status !== 200) {
return 'Error!';
}
return param1;
})
.then(promise2)
.catch((error) => {
return JSON.stringify({'Caught Error': error});
})
那么,问题呢? promise2
应该有.catch
,还是promise1
.catch
会发现错误?如果我错了,有什么更好的办法来解决这个问题?
答案 0 :(得分:1)
我相信,在下面的代码中,如果内部承诺中存在错误,那么它将被调用承诺上的.catch捕获。
没有。 catch
只会处理对其被调用的承诺的拒绝。
你可以(并且应该)然后让这个承诺与内部承诺一起解决,并且当内部承诺拒绝时拒绝,并通过返回承诺来拒绝then
回调。
promise1(param1).then(status => {
if (status !== 200) {
return 'Error!';
}
return promise2(param1, param2);
//^^^^^^
})
.then(result => { // you can unnest this now
return 'Yay, result!';
})
.catch((error) => {
return JSON.stringify({'Caught Error': error});
})