Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Angular解决由“返回的承诺”;然后";主承诺被拒绝时的功能_Angularjs_Angular Promise - Fatal编程技术网

Angularjs Angular解决由“返回的承诺”;然后";主承诺被拒绝时的功能

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

有人能解释一下为什么then函数返回的第二个承诺得到了解决吗?它看起来像是Promises实现中的Angular JS bug。根据文件,第二个承诺也应被拒绝

//代码在这里
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);
}