首页 > 解决方案 > 如何修复 AngularJS 中未定义的承诺错误

问题描述

我正在尝试在 AngularJS 中创建一个承诺:基本上我需要调用session.state()发出 http 请求然后返回一些数据的函数。我无法立即访问数据,因为它们仍未定义且尚未返回,因此我尝试建立一个承诺。

这是我到目前为止所尝试的:

这是我打电话的地方session.state()

session.state()
  .then(function(data){
  if (data['state']) {
    self.plan = data['plan'];
    self.pool_interface = data['pool_interface'];
  }
  callback(data['state']);
});

这就是session.state()它本身:

self.state = function() {
  $http.get(self.baseUrl + 'api/session/state')
  .then(function(response) {
    var dfd = $q.defer();
    dfd.resolve(response.data);
    return dfd.promise;
  });
};

这两段代码放在不同的服务中。

到目前为止,我只从浏览器控制台收到“错误:session.state(...) is undefined”错误。我究竟做错了什么?

标签: angularjsangular-promise

解决方案


您应该定义延迟并将其返回到您的异步操作之外,如下所示:


           self.state = function() {
              var dfd = $q.defer();
              $http.get(self.baseUrl + 'api/session/state')
              .then(function(response) {

                dfd.resolve(response.data);

              });
               return dfd.promise;
            };

推荐阅读