Javascript 在控制器中调用函数时等待服务

Javascript 在控制器中调用函数时等待服务,javascript,angularjs,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.

我是一名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);
      });
    }
  );
}

那么变量url是未定义的。我知道这是因为Javascript的异步行为,但我尝试修改它以添加承诺,但我读了一些教程,但没有成功。

您没有从该方法返回任何内容。尝试返回
$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;
    });
}

我试过你说的,但还是没有定义。
function  MainController ($log, $rootScope,  $scope, $sce, $q, $state, mainService) {    
    var globalUrl;

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