我的Api服务:
var sites = array['test','about','try'];
var element = 'other';
我的BookService:
app
.factory('apiService', apiService);
apiService.$inject = ['$http'];
function apiService($http) {
return {
get: _get,
post: _post
};
function _get(url, config) {
return $http.get(url, config);
}
function _post(url, data, config) {
return $http.post(url, data, config);
}
}
我的控制器:
app
.factory('bookService', bookService);
bookService.$inject=['SERVER_CONSTANT','BOOK_CONSTANT','apiService'];
function bookService(SERVER_CONSTANT,BOOK_CONSTANT,apiService) {
return {
getLowestOnlinePrice:_getLowestOnlinePrice
}
function _getLowestOnlinePrice(isbn){
return apiService.get("......");
}
}
我必须停止正在进行的http请求。当我打印承诺时,他们打印为function doSearch(data){
angular.forEach($scope.bookSearchResult,function(book){
book.lowestOnlinePricePromise =
bookService.getLowestOnlinePrice(book.bookIsbn).then(function(response){
...
}).catch(function(response){
...
});
});
}
function onClick(){
angular.forEach($scope.bookSearchResult,function(resultBook){
console.log(resultBook.lowestOnlinePricePromise);
//prints as Promise Object
});
angular.forEach($scope.bookSearchResult,function(resultBook){
resultBook.lowestOnlinePricePromise.resolve();
// Shows Error resolve is not a function
});
}
对象。现在如何阻止他们?我没有在Promise
上使用$q.defer()
。我不确定什么是最好的方法。尝试apiService
,但显示resolve()
。需要帮助。
我使用的是1.4.5版本
感谢建议。
答案 0 :(得分:2)
制作GET
& POST
apiService
功能如此
function _get(url, config) {
var defer = $q.defer();
var promise = $http.get(url, { timeout: defer.promise});
promise.abort = function(reason){
defer.resolve(reason);
};
return promise;
}
然后在控制器上:
function doSearch(data){
angular.forEach($scope.bookSearchResult,function(book){
(book.lowestOnlinePricePromise =
bookService.getLowestOnlinePrice(book.bookIsbn)).then(function(response){
...
}).catch(function(response){
...
});
});
}
function onClick(){
angular.forEach($scope.bookSearchResult,function(resultBook){
resultBook.lowestOnlinePricePromise.abort();
});
}
在该解决方案中,abort()
添加了 promise
功能。然后在控制器上保存唯一承诺。
再看一遍
(book.lowestOnlinePricePromise = bookService.getLowestOnlinePrice(book.bookIsbn)).then()
只要需要,只需拨打abort()
功能。
找到了帮助:http://www.bennadel.com/blog/2616-aborting-ajax-requests-using-http-and-angularjs.htm