我应该调用一个嵌套的诺言吗?

我被问到我的.catch处理什么许诺,现在我好奇,如果我是正确的。 我相信,在下面的代码中,如果内部承诺有错误,它将被我对调用承诺的.catch捕获。 我被问到的问题让我怀疑自己的理解,虽然我不认为我应该有一个嵌套的scheme,但我不确定替代解决scheme是什么。 我在节点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}); }) 

我曾经想过只是做这样的事情,但承诺2需要第二个参数:

  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 ? 如果我错了,怎么处理呢?

我相信,在下面的代码中,如果内部承诺有错误,它将被我对调用承诺的.catch捕获。

不可以。 catch只能处理拒绝承诺的承诺。

你可以(而且应该 )有内心的承诺解决,并且在内心拒绝的时候也拒绝承诺,从回头承诺。

 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}); })