我有一个允许用户进行搜索并获取数据的应用程序。在每次搜索中,都有 5 $http
来自后端获取数据的调用。我为每个$http
电话设置5秒超时。
$http.get(url, {timeout: 5000});
此外,我想在用户进行新搜索时中止所有正在进行的$http
次呼叫。所以,I can use a canceler。
var canceler = $q.defer();
$http.get(url, {timeout: canceler.promise});
$scope.cancel = function(){
canceler.resolve("ajax aborted");
};
如您所见,用户可以在5s超时之前进行新搜索。那么如何在这里同时使用时间和取消?在AngularJs中我有什么方法可以更容易地做到这一点(中止所有5个$http
调用)?
答案 0 :(得分:1)
为什么不在用户开始新搜索后添加一个可以解决你的取消承诺5000毫秒的超时?
$scope.startSearch = function(){
$timeout(function() {
canceler.resolve("time out :(");
}, 5000);
};
您可以添加一项检查以查看承诺是否已解决:
// set resolved to false each time you use your $http request
var canceler = $q.defer(), resolved = false;
$scope.cancel = function(){
if(resolved) return;
resolved = true;
canceler.resolve("ajax aborted");
};
$scope.startSearch = function(){
$timeout(function() {
if(resolved) return;
canceler.resolve("time out :(");
resolved = true;
}, 5000);
};
或者你可以这样做:
$scope.startSearch = function(){
stop = $timeout(function() {
canceler.resolve("time out :(");
}, 5000);
canceler.promise.then(function() { stop() });
};