为什么$q.当在Angular中后跟$q.拒绝时.js会导致成功
Why does $q.when followed by $q.reject in Angular.js result in success?
在 Angular 中.js 使用 $q 时,为什么这段代码不:
$q.when("test")
.then($q.reject("error"))
.then(
function(v) {
$scope.result = "Success: " + v;
},
function(e) {
$scope.result = "Failure: " + e;
}
)
调用错误回调?
在 jsfiddle 中:http://jsfiddle.net/c9tv6kz7/1/
根据文档
then(successCallback, errorCallback, notifyCallback) – 不管 当承诺已经或将被解决或拒绝时,然后调用一个 结果后立即异步异步回调 可用。回调使用单个参数调用: 结果或拒绝原因。此外,通知回调可能是 在 承诺已解决或拒绝。
此方法返回一个新的承诺,该承诺通过以下方式解析或拒绝 成功回调的返回值,错误回调(除非 值是一个承诺,在这种情况下,它用 使用承诺链接在该承诺中解决)。它还通知 通过通知回调方法的返回值。承诺不能 从通知回调方法中解析或拒绝。
我们真正关心的路线是
此方法返回一个新的承诺,该承诺通过以下方式解析或拒绝 成功回调、错误回调的返回值
每次你打电话给then
$q.when
你就是在创造一个新的承诺。即使第一个承诺被拒绝,第二个承诺也没有。第二个没有被拒绝,因为你的 successCallback 和 errorCallback 的返回值没有拒绝它。
更简单的答案是:
$q.reject("error")
创建一个由您的$q.when().then()
调用的新承诺对象。
这真的不会像你想的那样。 $q.reject("error")
返回一个带有 then
函数的对象。
查看文档中的方法部分:
promiseB = promiseA.then(function(result) {
// success: do something and resolve promiseB
// with the old or a new result
return result;
}, function(reason) {
// error: handle the error if possible and
// resolve promiseB with newPromiseOrValue,
// otherwise forward the rejection to promiseB
if (canHandle(reason)) {
// handle the error and recover
return newPromiseOrValue;
}
return $q.reject(reason);
});
你看到他们是如何做的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;
}
)
}]);
http://jsfiddle.net/emporio/67db45f9/3/
如果我删除$q.reject('Failed!')
,它将解析为 .then()。
- Node.js Passport成功登录后显示用户名
- Passport.js成功的身份验证根本没有调用
- 为什么$q.当在Angular中后跟$q.拒绝时.js会导致成功
- 使用节点确定成功/失败.js函数 async.retry
- 对成功网站的JS非常失望
- ajax没有;t成功后调用另一个js函数
- 如何在alt.js中使用源成功请求后更新状态
- 如何从我的js中分离错误和成功按钮
- AJAX/JS/PHP:如何替换发送到PHP文件的文件中的文本,并传递成功属性
- 在 require.js 中返回成功数据,并带有回调
- Backbone.js集合未按id成功获取
- backbone.js:model.save()总是成功的,尽管它应该't
- 上传PDF's使用Dropzone.js&拉拉维尔.有些上传成功,另一些则返回一个空对象
- JS Geolocation等待成功后返回值
- Angular Js中的$window.location成功消息
- Dropzone.js“成功”和“完整”有什么区别
- 在 ember 上复制嵌套模型.js(成功保存后)
- Express Passport.js成功重定向没有加载页面,请求一直挂起
- JS成功添加了一个标签,但网页显示失败
- 无法在IE8上使用jS成功重置iframe.style.height