全部:
我是 JS Promise 的新手,在谈到 Promise 链接时有一个混淆,假设我有一个像这样的 Promise 链接:
var p = new Promise(function(res, rej){
})
.then(
function(data){
},
function(err){
})
.then(
function(data){
},
function(err){
})
.catch(
function(err){
})
是什么让我困惑:
- 什么时候调用 function(err) 和什么时候调用 catch?
- 如何解决和拒绝
then
?
谢谢
原文由 Kuan 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 Promise 的公式是:
.catch
没有什么特别的,它只是.then (undefined, func)
的糖,但是.catch
更清楚地表明它纯粹是一个错误处理程序。如果
Promise
没有解决并且其中没有提供拒绝回调,它会跳到链中的下一个.then
中有一个拒绝回调。拒绝回调是reject(err)
。有关更详细的解释,请参阅: Javascript Promises - There and Back again 。
那就是:在你的例子中。
catch
只有在前面的拒绝回调有错误时才会被调用。那就是reject(err)
函数本身有错误 - 这与前面的Promise
没有解决无关。您基本上可以将自己限制在
.catch
在.then
链的末端的拒绝回调。任何Error
在任何.then
将落入.catch
。不过有一个微妙之处:.catch
中的任何错误都不会被捕获。