gpt4 book ai didi

java - 在我的服务中,我想通过另一个服务加载路径

转载 作者:行者123 更新时间:2023-12-01 12:41:59 25 4
gpt4 key购买 nike

我有一个有 Angular 的网络应用程序。

它有一个服务可以查询同一服务器上的简单节点 api。该 api 将环境变量的名称作为参数,并返回与该环境变量匹配的 java api 的路径。

servicesModule.factory('EnvVarApi', function($http){
var url = 'http://localhost:8080/api/variable_env/';
return {
getUrlApi : function(var_env, callbackSuccess) {
$http.get(url+ var_env).success(callbackSuccess);
}
}
});

这很好用。它返回以下形式的对象:{“cle”:API_KEY,“valeur”:API_PATH}

现在我想创建另一个服务,它将查询 java api(最后我将有 3 个)..我将如何仅检索一次该 API 的路径?一旦加载就返回正确的资源。 Atm 它正在崩溃,因为返回的资源在回调之前有一个空路径。

servicesModule.factory('ApiRef', function($resource, EnvVarApi){
var url = null;
EnvVarApi.getUrlApi('APIREF_KEY', function(data) {
if (data) {
url = data.valeur;
}
});

return $resource(url, {'cle' : '@cle'}, {
put : {method : 'PUT'}
});
});

第一个调用很好并返回路径,但是正如预期的那样,它中断了,因为我首先返回一个带有 null url 的 $resource 。也许有比将第一个服务注入(inject)第二个服务更好的方法。

编辑:已修复感谢下面标记的回答。

这里是最终代码:

servicesModule.factory('EnvVarApi', function($http){
var url = 'http://localhost:8080/api/variable_env/';
return {
getUrlApi : function(var_env) {
return $http.get(url+ var_env);
}
}
});

servicesModule.factory('ApiRef',['$q','$http', 'EnvVarApi',function ($q,$http, EnvVarApi) {

var defer = $q.defer();
EnvVarApi.getUrlApi('APIREF_KEY').then(function (resp) {
defer.resolve($http.get(resp.data.valeur));
});
return defer.promise;
}]);

最佳答案

您可以使用$q服务,查看下面的代码

app.factory('call2',['$q','$http',function ($q,$http) {
var url = 'whatever url';
var defer = $q.defer();
$http.get(url).then(function (resp) {
defer.resolve($http.get(resp.data));
//resp.data contains the returned by $http request URL object
});
return defer.promise;
}]);

在 Controller o指令端(记住将服务注入(inject) Controller )

call2.then(function (resp) {
$scope.response = resp.data;
//resp.data will contain the response of '$http.get(resp.data)'
})

你可以使用$resource代替$http.get,见下文

app.factory('call2', ['$q', '$resource', function ($q, $resource) {
var url = 'whatever url';
var defer = $q.defer();
$resource(url).get(function (resp) {
defer.resolve($resource(resp.url).get().$promise);
});
return defer.promise;
}]);

关于java - 在我的服务中,我想通过另一个服务加载路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25018328/

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