我想提出一个必须简单的问题。我需要捕获变量的值以作为参数传递(必需),以便使用API。此变量是一个方法的返回,该方法是JSON文件中的查询,但是返回的值未定义。
遵循代码:
用于在JSON中搜索ID(带有返回符)的功能
self.getId = function(){
$http({
method: 'GET',
url: self.urlEspecialidades,
headers: { 'Content-Type': 'application/json' }
}).then(function(resposta) {
var json = {};
json = resposta.data.data;
for(var i = 0; i < json.length; i++){
if(json[i].descricao == self.descricao){
var id_especialidade = (json[i].id_especialidade); }
}
console.log(id_especialidade);
return id_especialidade;
}) }
用于以JSON搜索状态(带有返回)的功能:
self.getUf = function() {
$http.get(self.urlEstados,
{
transformResponse: function (cvt) {
var x2js = new X2JS();
var aposCvt = x2js.xml_str2json(cvt);
return aposCvt; }
}).then(function(resposta) {
var json = {};
json = resposta.data.estados.data.item;
for(var i = 0; i < json.length; i++){
if(json[i].estado == self.estado){
var uf = (json[i].uf);
}
}
console.log(uf);
return uf;
}) }
使用带有两个参数的API的函数:
self.buscaPrestadores = function() {
var id_parametro = self.getId();
var uf_parametro = self.getUf();
console.log(id);
console.log(uf);
$http({
method: 'GET',
url: self.urlPrestadores,
headers: { 'Content-Type': 'application/json' },
params: {uf:uf_parametro,id_especialidade:id_parametro}
}).then(function(resposta) {
//código vem aqui...
}) }
如您所见,控制台在两个函数中找到值,但是当我尝试在将使用API的函数中捕获它们时,即使声明了return,它也显示为未定义。谁能告诉我我可能会想念什么?
答案 0 :(得分:0)
在承诺前添加return
,否则您将无法解决任何问题
self.getUf = function() {
return $http.get(...).then(function(resposta) {
...
return uf;
})
}
这将返回Promise,而不是uf
的值。
将其写为
uf_parametro = self.getUf()
每次需要从中提取uf_parametro
的值时,您都需要将uf
分解为一个承诺,例如:
uf_parametro.then(function(uf){ console.log(uf); })
如果要同时解析两个值,则需要使用$q.all()
方法,该方法将一个promise数组作为输入:
$q.all([id_parametro, uf_parametro]).then(function(res){ console.log(res); })