ngResource按服务返回成功回调结果

时间:2016-11-30 19:32:56

标签: angularjs service promise ngresource

我已经开始与AngularJs一起冒险,但是承诺和回归异步数据的想法让我感到不安。

我正在尝试通过.factory方法和$ resource服务来完成简单的数据返回。

这是我的$ resource服务返回承诺

(function () {
        angular.module('token')
            .factory('tokenService', ['$resource', 'baseUri', tokenService]);

        function tokenService($resource, baseUri) {
            return $resource(baseUri + 'token', {}, {
                post: {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded'
                    }
                }
            });
        }
    })();

我在另一个应该返回数据的服务中使用此服务。

(function () {
angular.module('authorization')
    .factory('authorizationService', ['$httpParamSerializer', 'tokenService', authorizationService]);

function authorizationService($httpParamSerializer, tokenService) {
    return {
        authorization: function(user){
            var token = {};
            tokenService.post({}, $httpParamSerializer({
                grant_type: 'password',
                username: user.login,
                password: user.password,
                client_id: user.clientId
            }), function(response){
                token = response;
                console.log('authorizationResponse', response);
                console.log('authorizationToken', token);
            });
            //     .$promise.then(function(response){
            //     token = response;
            //     console.log('authorizationResponse', response);
            //     console.log('authorizationToken', token);
            // });
            console.log('finalToken', token);
            return token;
        }
    };
}
})();

但我不能强制令牌变量在returing之前拥有tokenService.post()结果。

1 个答案:

答案 0 :(得分:0)

首先:在$q注入authorizationService

试试这个:

authorization: function(user) {
  return $q(function(resolve, reject) {
    tokenService.post({}, {
      grant_type: 'password',
      username: user.login,
      password: user.password,
      client_id: user.clientId
    })
    .$promise
    .then(function(token) {
      resolve(token);
    })
    .catch(function(err) {
      reject(err);
    });
  });
}

然后,在您的控制器中,您可以使用:

authorizationService.authorization(user)
.then(function(token) {
  // Some code here
})
.catch(function(err) {
  // Handle error here
});