У меня есть поставщик, который выглядит примерно так:
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
});
}
}
}]
});
В настоящее время приложение устанавливает appUrl в блоке .config на основе констант сгенерирована как часть сборки процесс с использованием grunt ngconstant.
Я пытаюсь изменить приложение, чтобы загрузить файл конфигурации из json-файла через $ http. Провайдер теперь выглядит примерно так:
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
});
}
}
});
}]
});
Это загружает конфигурацию из удаленного источника, но имеет нежелательный побочный эффект возвращение обещания вместо реальной функции. Я попробовал (безуспешно), чтобы решить обещание, прежде чем возвращать стоимость от поставщика. Я не хочу менять остальную часть моего приложения, чтобы ожидать обещания вместо функции, которую нужно вернуть. Каков наилучший способ убедиться, что этот метод возвращает функцию?
Как вы ожидаете, что это сработает? Вы выполняете операцию async, и modus operandus должен использовать обещание. Вы не можете (и не должны) блокировать обещание, и вы не можете рассматривать его как синхронный вызов. –
Сохраните исходный код. Когда приложение загружается, загрузите файл config.json, затем установитеAppUrl с ответом.appUrl – Hoyen
@Hoyen Если я что-то пропустил, вы не можете использовать $ http в блоке .config. – biagidp