AngularJS:创建$ http服务

时间:2013-07-31 17:49:41

标签: angularjs promise

我对Angular有点新意,我正在尝试建立一个非常简单的RPC实现,它使用angulars $http服务(工厂)来完成工作。以下是我到目前为止服务的内容:

'use strict';

angular.module('xxx')
  .factory('rpcService', function ($http) {

    return {
      request: function(method, params, callback) {
        var service = method.split('.');
        params = params || {};
        params.method = service[1];
        return $http.post('/services/' + service[0] + '.sjs', params).then(function (response) {
            return response.data;
        });
      }
    }

  });

然后,当我想使用该服务时,我将其称为如下:

rpcService.request('Users.facebookLogin', { token: response.authResponse.accessToken })
  .then(function(response) {
    debugger;
    $rootScope.user = response.user;
    console.log($rootScope.user);
    $rootScope.loggedIn = true;
    $rootScope.$apply();
});

代码永远不会在调试器之后到达行;事实上,代码根本不会发出$http请求。由于某种原因它停止并且不继续回调...或承诺......我对技术差异是什么感到困惑。 :)

话虽如此,我已经使用$.ajax测试了POST调用,并且一切都正常返回,因此我的Angular代码出现了问题。

实际触发请求并与$.ajax配合使用的代码:

'use strict';

angular.module('xxx')
  .factory('rpcService', function ($http) {

    return {
      request: function (method, params, callback) {
        var service = method.split('.');

        params = params || {};
        params.method = service[1];

        $.ajax('/services/' + service[0] + '.sjs', {
          type: 'POST',
          dataType: 'json',
          data: params,
          success: function(data, status, xhr) {
              if (callback) {
                  callback(data);
              }
          }
        });
      }
    }      
  });

我只是不确定为什么没有发出XHR请求。

1 个答案:

答案 0 :(得分:2)

API调用可能会出错,因此永远不会触发回调。尝试像这样添加error()回调:

return $http("POST", '/services/' + service[0] + '.sjs', params)
    .error(function (response) {
        return 'blah';
    }).then(function (response) {
        return response.data;
    });

您可以在此演示中试用它。你的代码看起来确实很好。

Demo on jsFiddle