angularjs - 使用 AngularJS 和 $httprequest 在另一个方法中捕获方法的返回
问题描述
我想问一个必须简单的问题。我需要捕获要作为参数传递的变量的值(必需)才能使用 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 的函数中捕获它们时,它显示为未定义,即使声明了返回。谁能告诉我我可能会错过什么?
解决方案
在promise之前添加return
,否则你无法解决任何问题
self.getUf = function() {
return $http.get(...).then(function(resposta) {
...
return uf;
})
}
这将返回一个Promise,而不是的值uf
。
一旦你把它写成
uf_parametro = self.getUf()
uf_parametro
每次需要从中提取价值时,都需要将其解析为 Promise uf
,例如:
uf_parametro.then(function(uf){ console.log(uf); })
如果要同时解析这两个值,则需要使用$q.all()
将一组 Promise 作为输入的方法:
$q.all([id_parametro, uf_parametro]).then(function(res){ console.log(res); })
推荐阅读
- java - 使用 orika 从多个来源映射到目的地
- android - 错误OpenGLRenderer:GL错误:内存不足
- r - 如何使用 ifelse 和缺失值进行变异?
- dart - 如何从 Dart 中的 Json 创建一个 zip 文件?
- laravel - Laravel 验证:使用范围给出“模型没有查询结果”
- php - WordPress中的自定义表单提交后未保存在数据库中并显示404错误
- csv - 使用管道 csv 删除行
- javascript - How to detect version of chrome used with puppeteer?
- windows - 如何强制 Kafka 在 64 位 JVM 上运行?
- service-worker - Web Share API 不适用于 Github 页面