【问题标题】:Returning angular promise in angular service module在角度服务模块中返回角度承诺
【发布时间】:2016-10-26 17:54:32
【问题描述】:

所以基本上我使用 Angular 来访问一个 json 文件,我在其中搜索具有相应电子邮件的用户。然后我需要找到这个用户并从服务模块中返回它。然后我需要返回的结果是一个承诺。到目前为止,这是我所拥有的……过去几个小时没有任何进展

getUser: function(authenticationName) {

            if(!(_.str.contains(authenticationName, "@"))) {

                return resource.get({userName: authenticationName}).$promise;
            }
                else if(_.str.contains(authenticationName, "@")) {

                    resource.query().$promise.then(function(data) {

                        var emailsArray = [],
                            userNamesArray = [];

                        _.map(data, function(user){ emailsArray.push(user.email); });
                        _.map(data, function(user){ userNamesArray.push(user.userName); });

                        if(_.indexOf(emailsArray, authenticationName) !== -1) {

                            var indexOfUser = _.indexOf(emailsArray, authenticationName),
                                user = userNamesArray[indexOfUser];

                            return resource.get({userName: user});

                        }

                    });



                }
        },

还有角度控制器,我得到“无法调用未定义的方法”:

userData.getUser(user.authenticationName)
                    .then(function(data) {

到目前为止一切都很好,如果我可以从这里返回用户然后调用 resource.get() 方法就一切都很好

return resource.get({userName: user});

【问题讨论】:

  • 你忘了resource.query(..).$promise.then之前的return? (然后在返回的 if 之后抛出一个 throw)
  • that 是什么意思?
  • 是的,但是如果你不输入if,你也应该做一些有意义的事情,例如——抛出一个错误来表明一个应用程序问题。
  • 好的,但是在另一个模块的 .then 函数中,结果是未定义的,所以整个返回未定义。有什么想法吗?
  • console.log("通过");不从这里登录,如果这将有助于 resource.query().$promise.then(function(data) {

标签: javascript jquery angularjs underscore.js promise


【解决方案1】:

由于else 语句中的详细说明,您必须返回一个新的承诺。

您可以使用 Angular 的 $q 或 ES6 的 Promise 来实现您的目标。

获取用户:

function(authenticationName) {

  var deferred = $q.defer(),
      ret;

  if(!(_.str.contains(authenticationName, "@"))) {

    ret = resource.get({userName: authenticationName});
    deferred.resolve(ret);
  }
  else {

    resource.query().$promise.then(function(data) {

      var emailsArray = [],userNamesArray = [];

      _.map(data, function(user){ emailsArray.push(user.email); });
      _.map(data, function(user){ userNamesArray.push(user.userName); });
      if(_.indexOf(emailsArray, authenticationName) !== -1) {

        var indexOfUser = _.indexOf(emailsArray, authenticationName),
                                user = userNamesArray[indexOfUser];

        ret = resource.get({userName: user});
        deferred.resolve(ret);

      }

    });
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2014-09-08
    相关资源
    最近更新 更多