AngularJS(Restangular):将服务方法包装成超时

时间:2016-05-05 08:06:23

标签: javascript angularjs promise restangular

在基本的$ 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;
}

然后我把它变成了反转角度,所以:

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

1 个答案:

答案 0 :(得分:1)

您可以利用$timeout返回承诺的事实:

function getSomeData() {
  var user = Restangular.one('mylongurl');
  return $timeout(2000)
      .then(function(){
           return user.get();
       });
}

较旧版本的角度可能仍需要传递给超时$timeout(function(){}, 2000)的空函数,但如果您使用的是最近版本,则可以完全省略它。