0
私は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の非同期的な振る舞いのためだと知っていますが、約束を加えるためにそれを修正しようとしましたが、私はチュートリアルを読んでいました。
私はあなたが言ったことを試みたが、それはまだ、undefinedを返します。その後、以下のようなあなたのコントローラでそれを呼び出す
$http.get
を返してみてください。 – ares1986