AngularJS (Restangular): 将服务方法包装到超时
AngularJS (Restangular): wrap service method into timeout
在基本的 $http 中我有这样的代码(这是一项服务):
var getSomeData = function() {
var deferred = $q.defer();
$timeout(function() {
$http.get('...mylongurl', {
headers: {
'Content-Type': 'application/json'
}
})
.success(function(response) {
deferred.resolve(response);
})
.error(function(error) {
deferred.reject(error);
});
}, 2000);
return deferred.promise;
}
我把它变成了 restangular 所以:
var getSomeData = function() {
var user = Restangular.one('mylongurl');
$timeout(function(){
return user.get().then(function (response) {
return response;
}, function(error){
return error;
});
}, 2000);
return user;
};
然后在控制器中我这样使用它:
someService.getSomeData().then()...
但现在超时我得到:someService.getSomeData().then is not a function
您可以利用 $timeout
returns 一个承诺:
function getSomeData() {
var user = Restangular.one('mylongurl');
return $timeout(2000)
.then(function(){
return user.get();
});
}
旧版本的 angular 可能仍需要将空函数传递给超时 $timeout(function(){}, 2000)
,但如果您使用的是最新版本,则完全可以忽略它。
在基本的 $http 中我有这样的代码(这是一项服务):
var getSomeData = function() {
var deferred = $q.defer();
$timeout(function() {
$http.get('...mylongurl', {
headers: {
'Content-Type': 'application/json'
}
})
.success(function(response) {
deferred.resolve(response);
})
.error(function(error) {
deferred.reject(error);
});
}, 2000);
return deferred.promise;
}
我把它变成了 restangular 所以:
var getSomeData = function() {
var user = Restangular.one('mylongurl');
$timeout(function(){
return user.get().then(function (response) {
return response;
}, function(error){
return error;
});
}, 2000);
return user;
};
然后在控制器中我这样使用它:
someService.getSomeData().then()...
但现在超时我得到:someService.getSomeData().then is not a function
您可以利用 $timeout
returns 一个承诺:
function getSomeData() {
var user = Restangular.one('mylongurl');
return $timeout(2000)
.then(function(){
return user.get();
});
}
旧版本的 angular 可能仍需要将空函数传递给超时 $timeout(function(){}, 2000)
,但如果您使用的是最新版本,则完全可以忽略它。