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),但如果您使用的是最新版本,则完全可以忽略它。