【发布时间】:2020-01-18 09:17:40
【问题描述】:
当再次调用相同的 api 时,我试图取消挂起的 api 调用。我有下拉 onChange 我正在调用我的 api ,这里 api 调用需要很多时间来返回数据,所以我取消了所有以前在 pendingRequest 数组中的调用并只保留最新触发的调用。请在下面查看我的代码
在我的控制器中
angular.forEach($http.pendingRequests,function(r){
console.log(r.contractId);
if (r.contractId && r.contractId !== selectedContract) {
r.cancel.resolve('cancelled');
}
});
在这里,我通过将当前选择的合约与 pendingRequest 数组进行比较来检查挂起的请求是否是最新的。
这就是我编写服务的方式
getDashboardData:function(selectedContract) {
var deferred = $q.defer();
var cancel = $q.defer();
$rootScope.loaderOn=true;
var url = 'my_url_here';
$http.get(url, {
ignoreLoadingBar: true,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
cancel:cancel, //this is of type $q.defer();
contractId:selectedContract // here i assigned contrract id just to delete all pending api's other than current
}).then(function(data){
deferred.resolve(data.data);
$rootScope.loaderOn=false;
},function(error){
console.log(error);
return deferred.reject(err);
});
return deferred.promise;
}
我想取消或拒绝挂起的 API 调用。任何帮助将不胜感激,谢谢。让我知道是否需要任何其他信息。请在这里纠正我。
【问题讨论】:
-
switchMap 使用 rxjs 将解决您的问题
-
我使用的是 angularJS 而不是 angular 2
-
对不起,但我不认为这是一个问题,因为我从未使用过 angularJS*。但是 afaik,rxjs 是满足您异步需求的实用工具,因此为此安装软件包应该没有问题
-
rxjs 中的地图是循环的吗?使用 angular foreacha 和 map 有什么区别?
-
地图,是的,它是一样的。 map 返回一个数组,而 forEach 只遍历
标签: angularjs xmlhttprequest angular-promise deferred