我是一个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的异步行为,但尝试修改它以添加一个承诺,但我读了一些教程,但我没有让它工作。
答案 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;
});
}