javascript – AngularJS:从内部返回一个承诺.then?

我有一个用户服务.我想创建一个利用我建立的其他服务的方法.这项服务有两种方法. getUser()和getCurrentUser(). getCurrentUser()利用获取UID的注入服务.它使用返回的UID来运行getUser()方法.我的问题是我无法让getCurrentUser()返回第二层承诺.

这个问题有点难以解释.这是代码……

svs.service("usersService", function($rootScope, $http, loginService, alertBoxService) {
  var self = this;
  self.getUser = function(identifier, column) {
    if (typeof(column) === 'undefined') column = "uid";
    return $http.get($rootScope.api + "/getUser/" + identifier + "/" + column);
  }
  self.getCurrentUser = function() {
    var currentUserPromise;
    loginService.getCurrentUid().then(
      function(response) {
        if (response.data === "false") {
          alertBoxService.trigger($rootScope.unexpectedApiResponse);
        } else {
          console.log(self.getUser(response.data));
          currentUserPromise = self.getUser(response.data);
        }
      }, function(response) {
        alertBoxService.trigger($rootScope.asyncFailed);
      }
    );
    return currentUserPromise;
  }
});

解决方法:

将承诺链接起来但不要忘记将拒绝联系起来……

self.getCurrentUser = function() {
    return loginService.getCurrentUid().then(function(response) {
        if (response.data === 'false') {
            alertBoxService.trigger($rootScope.unexpectedApiResponse);
            return $q.reject(response); // convert into a rejection
        }
        return self.getUser(response.data); // chain the promise resolution
    }, function(response) {
        alertBoxService.trigger($rootScope.asyncFailed);
        return $q.reject(response); // chain the rejections
    });
}

当然,您需要注入$q服务.

作为Bergi kindly pointed out,您也可以通过抛出错误而不是使用$q.reject来拒绝承诺,例如

throw response;
上一篇:c# – 嵌套泛型集合:如何实现从项到容器的引用?


下一篇:如何从列表列表中获取多个列表中项目的子序列?