如何解决在 AngularJS 中取消请求
我浏览了一些链接:
How to cancel an $http request in AngularJS?
Cancelling ongoing Angular $http requests when there's a new request
How to cancel a $http call from controller in Angular JS?
但在我的代码中不起作用
如何取消之前的请求?下面是我的请求服务代码。
function PostData (url,data,cancelPrevious,auth,token,headers) {
var deferred = $q.defer();
token = token || window.apiToken;
headers = headers || {};
if (cancelPrevious && $http.pendingRequests.length > 0) {
deferred.resolve('cancel');
var deferred = $q.defer();
var newPostData = data ? JSON.stringify(JSON.parse(data)) : null;
$http({
method: "POST",url: url,headers: headers,data: newPostData
}).then(function (response) {
deferred.resolve(response.data);
}),function (data) {
deferred.resolve(data);
};
return deferred.promise;
} else {
var newPostData = data ? JSON.stringify(JSON.parse(data)) : null;
$http({
method: "POST",function (data) {
deferred.resolve(data);
};
return deferred.promise;
}
};
Using -
Service.PostData(config.apiBaseUrl + "Monitoring/GetAllSpotLines",JSON.stringify(postData),true)
如果 $http.pendingRequests 数组中有待处理的请求,我将使用 'cancelPrevious' 标志取消请求。
我已经清楚地检查过它是否正在进入该条件但 deferred.resolve('cancel') 不起作用
解决方法
您可以将较早的承诺对象存储在另一个变量中,当您发现待处理的请求大于 0 时,您就可以解决待处理的承诺。查看更新后的代码:
var pendingDeferred;
function PostData (url,data,cancelPrevious,auth,token,headers) {
var deferred = $q.defer();
token = token || window.apiToken;
headers = headers || {};
if (cancelPrevious && $http.pendingRequests.length > 0 && pendingDeferred) {
pendingDeferred.resolve('cancel');
pendingDeferred = deferred;
var newPostData = data ? JSON.stringify(JSON.parse(data)) : null;
$http({
method: "POST",url: url,headers: headers,data: newPostData
}).then(function (response) {
deferred.resolve(response.data);
}),function (data) {
deferred.resolve(data);
};
return deferred.promise;
} else {
pendingDeferred = deferred;
var newPostData = data ? JSON.stringify(JSON.parse(data)) : null;
$http({
method: "POST",function (data) {
deferred.resolve(data);
};
return deferred.promise;
}
};
我已将先前的承诺存储在“pendingDeferred”变量中,下次如果找到待处理的请求,则解决待处理的承诺。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。