AngularJS - 从 Returns 承诺的服务取消 HTTP 请求
AngularJS - Cancelling a HTTP Request From a Service That Returns a Promise
我有一个如下所示的服务方法:
this.myServiceFunction = function(){
var deferred = $q.defer();
$http({
method: 'GET',
url: 'domain/myendpoint'
})
.success(function(data){
deferred.resolve(data);
})
.error(function(data){
deferred.reject(data);
});
return deferred.promise;
};
我按以下方式在我的控制器中使用此方法:
$scope.myControllerFunction = function(){
myService.myServiceFunction().then(function(){
// Do things when promise resolves
});
};
我想在命令的另一个函数中取消上面的 HTTP 调用。我发现这个 answer 允许您通过对从 $q.defer()
返回的对象调用 resolve()
方法来取消 HTTP 请求。但是在我的代码库中,这个对象从未在我的控制器中可用。
myService.myServiceFunction()
在上面的示例中 returns 从 $q.defer()
返回的 promise
对象。如何在我拥有的范围内取消我的 HTTP 请求?
以下内容回答了问题,没有您原始代码中的开销。
this.myServiceFunction = function(){
this.canceler = $q.defer();
return $http({
method: 'GET',
url: 'domain/myendpoint',
timeout: this.canceler.promise
});
};
this.cancelServiceFunction = function() {
return this.canceler.resolve();
};
但是,如果您出于某种原因需要使用该模式,您可以使用以下内容:
this.myServiceFunction = function(){
this.canceler = $q.defer();
this.deferred = $q.defer();
$http({
method: 'GET',
url: 'domain/myendpoint',
timeout: this.canceler.promise
})
.success(function(data){
deferred.resolve(data);
})
.error(function(data){
deferred.reject(data);
});
return deferred.promise;
};
this.cancelServiceFunction = function() {
return this.canceler.resolve();
};
我有一个如下所示的服务方法:
this.myServiceFunction = function(){
var deferred = $q.defer();
$http({
method: 'GET',
url: 'domain/myendpoint'
})
.success(function(data){
deferred.resolve(data);
})
.error(function(data){
deferred.reject(data);
});
return deferred.promise;
};
我按以下方式在我的控制器中使用此方法:
$scope.myControllerFunction = function(){
myService.myServiceFunction().then(function(){
// Do things when promise resolves
});
};
我想在命令的另一个函数中取消上面的 HTTP 调用。我发现这个 answer 允许您通过对从 $q.defer()
返回的对象调用 resolve()
方法来取消 HTTP 请求。但是在我的代码库中,这个对象从未在我的控制器中可用。
myService.myServiceFunction()
在上面的示例中 returns 从 $q.defer()
返回的 promise
对象。如何在我拥有的范围内取消我的 HTTP 请求?
以下内容回答了问题,没有您原始代码中的开销。
this.myServiceFunction = function(){
this.canceler = $q.defer();
return $http({
method: 'GET',
url: 'domain/myendpoint',
timeout: this.canceler.promise
});
};
this.cancelServiceFunction = function() {
return this.canceler.resolve();
};
但是,如果您出于某种原因需要使用该模式,您可以使用以下内容:
this.myServiceFunction = function(){
this.canceler = $q.defer();
this.deferred = $q.defer();
$http({
method: 'GET',
url: 'domain/myendpoint',
timeout: this.canceler.promise
})
.success(function(data){
deferred.resolve(data);
})
.error(function(data){
deferred.reject(data);
});
return deferred.promise;
};
this.cancelServiceFunction = function() {
return this.canceler.resolve();
};