gpt4 book ai didi

angularjs - Angular - 使用 Restangular 时中止 ajax 请求

转载 作者:行者123 更新时间:2023-12-03 20:09:14 25 4
gpt4 key购买 nike

我有一个调用 angular.service 的方法,因此通过该服务发出 ajax 请求。我需要确保如果这被多次调用,之前的请求会被中止(如果它还没有被解决的话)。

这个方法可以被多次调用。这个方法其实是来自ngTableParams上的ngTable :

getData = function($defer, params) {

myService.getRecord(params).then(function(res){
...
$defer.resolve(res.Records);
});
}

这是服务上的方法:
this.getRecords = function(params) {
...

return Restangular
.all('/api/records')
.post(filters);
};

如果 ngTable 进行 3 次调用,我希望前 2 次调用被中止(当然,除非它们返回得如此之快以至于它得到了解决)

最佳答案

如果您想在更改 UI 路由器的状态时中止所有 http 请求,这是另一种方法:

angular
.run(function(HttpHandlerSrv) {
HttpHandlerSrv.abortAllRequestsOn('$stateChangeSuccess');
HttpHandlerSrv.R.setFullRequestInterceptor(function(element, operation, route, url, headers, params, httpConfig) {
httpConfig = httpConfig || {};
if(httpConfig.timeout === undefined) {
httpConfig.timeout = HttpHandlerSrv.newTimeout();
}
return { element: element, params: params, headers: headers, httpConfig: httpConfig };
});
})

.factory('HttpHandlerSrv', HttpHandlerSrv);


/** ngInject */
function HttpHandlerSrv($q, $rootScope, Restangular) {
var requests = [];

return {
R: Restangular,
newTimeout: newTimeout,
abortAllRequests: abortAllRequests,
abortAllRequestsOn: abortAllRequestsOn
};

function newTimeout() {
var request = $q.defer();
requests.push(request);
return request.promise;
}

function abortAllRequests() {
angular.forEach(requests, function(request) {
request.resolve();
});
requests = [];
}

function abortAllRequestsOn(event) {
$rootScope.$on(event, function(event, newUrl, oldUrl) {
if(newUrl !== oldUrl) { abortAllRequests(); }
});
}
}

关于angularjs - Angular - 使用 Restangular 时中止 ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21538772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com