【问题标题】:Capture the return of a method inside another method using AngularJS and $httprequest使用 AngularJS 和 $httprequest 在另一个方法中捕获方法的返回
【发布时间】:2018-10-08 10:01:11
【问题描述】:

我想问一个简单的问题。我需要捕获要作为参数传递的变量的值(必需)才能使用 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 的函数中捕获它们时,它显示为未定义,即使声明了返回。谁能告诉我我可能缺少什么?

enter image description here

【问题讨论】:

  • Aleksey,真的很抱歉,但我听不懂你在说什么。你能用我的例子和代码解释我吗?甚至是使用这种方法进行学习的材料。我是 angularJS 的新手。

标签: angularjs get httprequest


【解决方案1】:

在promise前加return,不然什么都解决不了

self.getUf = function() {
  return $http.get(...).then(function(resposta) {
    ...
    return uf;
  })
}

这将返回一个Promise不是uf的值。
一旦你把它写成

uf_parametro = self.getUf()

每次需要从中提取uf 的值时,都需要将uf_parametro 解析为Promise,例如:

uf_parametro.then(function(uf){ console.log(uf); })

如果你想同时解析这两个值,你需要使用$q.all() 方法,该方法将一个promise数组作为输入:

$q.all([id_parametro, uf_parametro]).then(function(res){ console.log(res); })

【讨论】:

  • 非常感谢,我会尽快尝试并给您反馈(和+rep)。
  • 晚安,Aleksey,我完全按照你说的做了,控制台显示了我想要的响应,但是如何将值的结果放在 $http 下方的参数上?我需要通过他来使用 API。
  • 不在下方,而是在.then() 成功回调中。否则会是异步的,无法及时填充参数
  • 我一直不明白,参数应该包含在 $http({}) 中以消耗 API 思想。
猜你喜欢
  • 2017-10-01
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多