Angularjs Angular解决由“返回的承诺”;然后";主承诺被拒绝时的功能
有人能解释一下为什么then函数返回的第二个承诺得到了解决吗?它看起来像是Promises实现中的Angular JS bug。根据文件,第二个承诺也应被拒绝Angularjs Angular解决由“返回的承诺”;然后";主承诺被拒绝时的功能,angularjs,angular-promise,Angularjs,Angular Promise,有人能解释一下为什么then函数返回的第二个承诺得到了解决吗?它看起来像是Promises实现中的Angular JS bug。根据文件,第二个承诺也应被拒绝 //代码在这里 var myMod=angular.module(“myMod”,[]); myMod.controller('bodyCtrl',函数($scope,$timeout,$q){ var deferred=$q.deferred(); 延期。承诺。然后(功能(d){ console.log(“成功调用”); 返回d; }
//代码在这里
var myMod=angular.module(“myMod”,[]);
myMod.controller('bodyCtrl',函数($scope,$timeout,$q){
var deferred=$q.deferred();
延期。承诺。然后(功能(d){
console.log(“成功调用”);
返回d;
},功能(d){
log(“调用失败”);
返回d;
})
.然后(功能(d){
console.log(“成功调用2”);
返回d;
},功能(d){
console.log(“调用失败2”);
返回d;
});
$timeout(函数(){
拒绝();
}, 2 * 1000);
});代码>
你好,普朗克!
这是设计的。之所以发生这种情况,是因为通过提供带有errorCallback的承诺,您实际上正在处理/解决/捕获拒绝(就像您在try…catch块中捕获异常一样)。如果删除第一个errorCallback函数,则应该在开发人员控制台中看到调用失败2,或者如果在第一个回调中抛出新异常 这是设计的。之所以发生这种情况,是因为通过提供带有errorCallback的承诺,您实际上正在处理/解决/捕获拒绝(就像您在try…catch块中捕获异常一样)。如果删除第一个errorCallback函数,则应该在开发人员控制台中看到调用失败2,或者如果在第一个回调中抛出新异常 正如@Nikolaj Dam Larsen和@georgeawg所说,您的问题是在errorCallback()中没有抛出异常。请参见以下示例()
正如@Nikolaj Dam Larsen和@georgeawg所说,您的问题是在errorCallback()中没有抛出异常。请参见以下示例()
与@georgeawg…相关或返回与@georgeawg…相关的$q.reject()
或返回与@georgeawg…相关的$q.reject()
function bodyCtrl($timeout, $q){
deferred.promise
.then(function(d) { //Promise 1
console.log("success called");
return d;
}, function(e) {
console.log("failure called");
throw e; //Throw instead return
})
.then(function(d) { //Promise 2
console.log("success called2");
return d;
}, function(e) {
console.log("failure called2");
throw e; //Throw instead return
});
$timeout(function() {
deferred.reject("Custom Rejected: " + new Date());
}, 2000);
}