0
を返す前に、$ HTTP要求を解決し、私は次のようになりますプロバイダを持っている:Angularjsプロバイダ:
angular.module('myProvider', function(){
var appUrl = ''
this.setAppUrl = function(url){
appUrl = url;
}
this.$get = ['$http', function($http){
return {
appAction: function(){
$http.get(appUrl).then(function(response){
//do stuff
});
}
}
}]
});
現在アプリがビルドの一部として生成された定数に基づいての.configブロックにappUrlを設定し、プロセスを不平等にする。
私は、$ http経由でjsonファイルから設定ファイルを読み込むようにアプリケーションを変更しようとしています。プロバイダーは今、このようなものになります。これは、リモートソースから設定をロード
angular.module('myProvider', function(){
this.$get = ['$http', function($http){
return $http.get('path/to/config.json').then(function(response){
appUrl = response.appUrl;
return {
appAction: function(){
$http.get(appUrl).then(function(response){
//do stuff
});
}
}
});
}]
});
を、実際の機能の代わりに約束を返すの不要な副作用があります。私はプロバイダから値を返す前に約束を解決しようとしました(失敗した)。私は返される関数の代わりに約束を期待するために、残りのアプリケーションを変更したくありません。このメソッドが関数を返すことを確認する最良の方法は何ですか?
これはうまくいくと思いますか?あなたは非同期オペレーションを実行しています。そして、モダウスオペランドは約束を使用することです。あなたは約束を守ることはできません(そして、そうすべきでもありません)。また、それを同期呼び出しのように扱うことはできません。 –
元のコードを保管してください。アプリケーションが読み込まれたら、config.jsonファイルを読み込み、response.appUrlでsetAppUrlをロードしてください。 – Hoyen
@Hoyen何かが見逃されていない限り、.configブロックで$ httpを使用できません。 – biagidp