Javascript 为什么在Angular.js中$q.when后跟$q.reject会导致成功?
在Angular.js中,当使用$q时,为什么不使用以下代码:Javascript 为什么在Angular.js中$q.when后跟$q.reject会导致成功?,javascript,angularjs,angular-promise,Javascript,Angularjs,Angular Promise,在Angular.js中,当使用$q时,为什么不使用以下代码: $q.when("test") .then($q.reject("error")) .then( function(v) { $scope.result = "Success: " + v; }, function(e) { $scope.result = "Failure: " + e; } ) 调用错误回调 在JSFIDLE中: 然后(su
$q.when("test")
.then($q.reject("error"))
.then(
function(v) {
$scope.result = "Success: " + v;
},
function(e) {
$scope.result = "Failure: " + e;
}
)
调用错误回调
在JSFIDLE中:
然后(successCallback、errorCallback、notifyCallback)–不管
当承诺被或将被解决或拒绝时,则调用一个
一旦结果出现,成功或错误的消息将立即异步回调
有空。调用回调时使用一个参数:
结果或拒绝原因。此外,通知回调可能是
调用零次或多次以提供进度指示,然后
承诺被解决或拒绝
此方法返回一个新的承诺,该承诺通过
successCallback的返回值errorCallback(除非
价值是一种承诺,在这种情况下,它与
使用承诺链在该承诺中解决)。它还通知
通过notifyCallback方法的返回值。承诺是不可能的
无法从notifyCallback方法中解析或拒绝
我们真正关心的是
此方法返回一个新的承诺,该承诺通过
successCallback的返回值errorCallback
每次调用时,请在$q上执行。当创建新承诺时。尽管第一个承诺被拒绝,第二个承诺却没有。第二个没有被拒绝,因为successCallback和errorCallback的返回值没有拒绝它
然后(successCallback、errorCallback、notifyCallback)–不管
当承诺被或将被解决或拒绝时,则调用一个
一旦结果出现,成功或错误的消息将立即异步回调
可用。调用回调时使用一个参数:
结果或拒绝原因。此外,通知回调可能是
调用零次或多次以提供进度指示,然后
承诺被解决或拒绝
此方法返回一个新的承诺,该承诺通过
successCallback的返回值errorCallback(除非
价值是一种承诺,在这种情况下,它与
使用承诺链在该承诺中解决)。它还通知
通过notifyCallback方法的返回值。承诺是不可能的
无法从notifyCallback方法中解析或拒绝
我们真正关心的是
此方法返回一个新的承诺,该承诺通过
successCallback的返回值errorCallback
每次调用时,请在$q上执行。当创建新承诺时。尽管第一个承诺被拒绝,第二个承诺却没有。第二个没有被拒绝,因为successCallback和errorCallback的返回值没有拒绝它 更简单的答案是:
$q.reject(“错误”)
创建一个新的promise对象,该对象由$q.when().then()调用
这真的不会像你想的那样$q.reject(“error”)
返回带有的对象,然后返回函数
请参阅以下内容中的方法部分:
你看到他们是如何做的吗?then(function(){return$q.reject(reason);})
这与你原来的版本有很大的不同
参见new更简单的答案是:
$q.reject(“错误”)
创建一个新的promise对象,该对象由$q.when().then()调用
这真的不会像你想的那样$q.reject(“error”)
返回带有的对象,然后返回函数
请参阅以下内容中的方法部分:
你看到他们是如何做的吗?then(function(){return$q.reject(reason);})
这与你原来的版本有很大的不同
请参见“新建”当我这样做时,我会解决一个错误:
var myApp = angular.module('myApp', []);
myApp.controller('MyCtrl', ['$scope', '$q', function($scope, $q) {
$q.when("test")
$q.reject('Failed!')
.then(
function(v) {
$scope.result = "Success: " + v;
},
function(e) {
$scope.result = "Failure: " + e;
}
)
}]);
如果我删除$q.reject('Failed!')
,它将解析为。然后()。当我这样做时,我会解析一个错误:
var myApp = angular.module('myApp', []);
myApp.controller('MyCtrl', ['$scope', '$q', function($scope, $q) {
$q.when("test")
$q.reject('Failed!')
.then(
function(v) {
$scope.result = "Success: " + v;
},
function(e) {
$scope.result = "Failure: " + e;
}
)
}]);
如果我删除$q.reject('Failed!')
,它将解析为.then()。我不确定是否遵循。我期望发生的是:1)“当”创建一个立即解决成功的承诺2)“拒绝”创建一个立即解决(拒绝)失败的承诺3)“然后”创建一个依次解决第一个承诺,然后解决第二个承诺4)如果两个承诺中的任何一个失败,“then”应该用一个错误来解决。误解是你期望你的承诺相互关联。按照你写的方式,情况并非如此。你的每一个承诺都独立于之前的承诺。所以,如果一个失败了,另一个就不会了。我不确定我是否会遵守。我期望发生的是:1)“当”创建一个立即解决成功的承诺2)“拒绝”创建一个立即解决(拒绝)失败的承诺3)“然后”创建一个依次解决第一个承诺,然后解决第二个承诺4)如果两个承诺中的任何一个失败,“then”应该用一个错误来解决。误解是你期望你的承诺相互关联。按照你写的方式,情况并非如此。你的每一个承诺都独立于之前的承诺。因此,如果其中一个失败,另一个不会。您会收到错误,因为$q.reject('failed!')是一个失败的承诺。你的场景不是OP的。情况是,他将一个失败的承诺包装在一个承诺中。OP?这意味着什么?您会得到错误,因为$q.reject('failed!')是一个失败的承诺。你的场景不是OP的。情况是,他将一个失败的承诺包装在一个承诺中。OP?这是什么意思?你想要$q.when(“错误”)。然后($q.reject)
你想要$q.when(“错误”)。然后($q.reject)