All:
我对 JS Promise 还很陌生,当谈到 Promise 链接时,有一个令人困惑的地方,假设我有一个如下的 Promise 链接:
var p = new Promise(function(res, rej){
})
.then(
function(data){
},
function(err){
})
.then(
function(data){
},
function(err){
})
.catch(
function(err){
})
让我困惑的是:
- 什么时候调用函数(err)以及什么时候调用catch?
- 如何解决和拒绝
then
?
Thanks
使用 Promise 的公式是:
var p = new Promise(function(resolve, reject) {
var condition = doSomething();
if (condition) {
resolve(data);
} else {
reject(err);
}
});
没什么特别的.catch
,这只是糖.then (undefined, func)
, but .catch
更清楚地表明它纯粹是一个错误处理程序。
If a Promise
没有解决并且没有提供拒绝回调,它跳到下一个.then
在链中,其中有拒绝回调。拒绝回调是reject(err)
.
更详细的解释请参见:Javascript Promises - 来来回回 http://www.html5rocks.com/en/tutorials/es6/promises/.
那就是:在你的例子中。catch
仅当前面的拒绝回调有错误时才会被调用。那就是有一个错误reject(err)
函数本身 - 与前面的无关Promise
没有解决。
您基本上可以将自己限制在拒绝回调中.catch
在你的尽头.then
链。任何Error
in any .then
然后将落入.catch
。但有一个微妙之处:任何错误.catch
没有被抓住。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)