gpt4 book ai didi

javascript - Angularjs 提供者 : Resolve $http request before returning

转载 作者:行者123 更新时间:2023-12-03 07:15:45 25 4
gpt4 key购买 nike

我有一个如下所示的提供程序:

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

目前,应用程序根据使用 grunt ngconstant 构建过程中生成的常量在 .config block 中设置 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
});
}
}
});
}]
});

这会从远程源加载配置,但会产生返回 promise 而不是实际函数的副作用。在从提供者返回值之前,我尝试(未成功)解决 promise 。我不想更改应用程序的其余部分以期望返回 promise 而不是函数。确保此方法返回函数的最佳方法是什么?

最佳答案

服务的 appAction 方法无论如何都会返回一个 promise ;所以我们保留 appUrl 的值:如果它非空,我们用它来检索数据。否则,我们会链式 promise :首先检索配置,然后检索真实数据。类似于以下内容:

angular.module('myProvider', function(){
this.$get = ['$http', function($http){
var appUrl;

function retrieveTheRealData() {
return $http.get(appUrl).then(function(response){
//do stuff
});
}

return {
appAction: function() {
if( appUrl ) {
return retrieveTheRealData();
}
else {
return $http.get('path/to/config.json').then(function(response){
appUrl = response.appUrl;
return retrieveTheRealData();
});
}
}
};
}]
});

关于javascript - Angularjs 提供者 : Resolve $http request before returning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36435927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com