在我的AngularJS应用程序中,我试图在finally
来电中使用$http
。
这是我的服务
app.service("webResource", function($http, $q) {
return {
post : function(url, json) {
var defer = $q.defer();
$http.post(url, json)
.success(function (data, status) {
if (data!=null) {
defer.resolve(data);
} else {
defer.notify("Send notify....");
}
}).error(function (data, status) {
defer.reject({"response":data, "status": status});
});
return defer.promise;
}
};
});
在我的控制器中我有
$scope.callServer = function() {
var promise = webResource.post('someurl',$scope.data);
promise
.then(
function(data) {
alert("Success");
//Do for success
},
function(data) {
alert("Error");
//Do for failure
},
function(data) {
alert("Notify");
}
).finally(function() {
alert("Finally");
});
};
如果它已被解决或拒绝,它可以正常工作。但是,如果它通知了"通知" ,但随后没有提醒"最后" 。那是为什么?
我使用的是AngularJS 1.4.2版本
答案 0 :(得分:4)
.finally
采用以下形式进行两次回调:
.finally(callback, notifyCallback)
您目前只向您的finally
处理程序发送一个回调,因此您只会在alert('Finally!)
或resolve
上触发reject
。
向.finally
步骤添加第二个回调,当您执行deferred.notify
时, 会看到触发回调。
<强> docs ($q.promiseAPI) 强>
答案 1 :(得分:0)
它最终没有去的原因是因为你可以有多个通知。来自文档:
“notify(value) - 提供有关承诺执行状态的更新。在承诺解决或被拒绝之前,可以多次调用。”
最后一旦承诺完全结束(解决和拒绝完成承诺)
https://docs.angularjs.org/api/ng/service/$q#the-deferred-api