在控制器中调用功能时等待服务

时间:2017-02-06 00:31:26

标签: javascript angularjs

我是一个Javascript初学者,并试图理解承诺和异步,但它一直很难。

我的服务中有这个功能:

`main.service.js

function getTableauUrl() {

  $http.get(TABLEAU_URLS).then(function (response) {
      var urls = response.data;
      getUser().then(function (data) {
        var company =  data.account.name;
        for (var i=0; i< response.data.length; i++){
          if (urls[i].name === company){
            return urls[i].url;
          }
        }

      }, function errorGetUser(error) {
        $log.info(error);
      });
    }
  );
}

如果我立即使用它,此函数可以正常工作,但如果我从控制器调用它:

function  MainController ($log, $rootScope,  $scope, $sce, $q, $state,
                            mainService) {

var url = mainService.getTableauUrl();

  }

然后变量url未定义。我知道这是因为Javascript的异步行为,但尝试修改它以添加一个承诺,但我读了一些教程,但我没有让它工作。

1 个答案:

答案 0 :(得分:0)

您没有从该方法返回任何内容。尝试返回$http.get

function getTableauUrl() {
  return $http.get(TABLEAU_URLS).then(...);
}

然后在你的控制器中调用它,如下所示:

function  MainController ($log, $rootScope,  $scope, $sce, $q, $state, mainService) {    
    var globalUrl;

    mainService.getTableauUrl().then(function(url) {
        globalUrl = url;
    });
}