2017-02-06 1 views
0

Ich bin ein Javascript-Anfänger und versucht Versprechungen und Asynchronität zu verstehen, aber es war hart.Warten auf Service beim Aufruf der Funktion im Controller

Ich habe diese Funktion in meinem Dienst:

`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); 
     }); 
    } 
); 
} 

Diese Funktion funktioniert gut, wenn ich es sofort, aber wenn ich nenne es von einem Controller:

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

var url = mainService.getTableauUrl(); 

    } 

Dann ist die Variable URL nicht definiert. Ich weiß, dass es wegen des asynchronen Verhaltens von Javascript ist, aber versuchte, es zu ändern, um ein Versprechen hinzuzufügen, aber ich lese einige Tutorials und ich habe es nicht funktionieren lassen.

Antwort

0

Sie geben nichts von dieser Methode zurück. Versuchen Sie, die $http.get

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

dann Rückkehr es in Ihrem Controller Aufruf wie folgt:

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

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

Ich habe versucht, was Sie gesagt haben, aber es ist nach wie vor der Rückkehr nicht definiert. – ares1986

Verwandte Themen