【问题标题】:equalTo() is failing to return expected responseequalTo() 未能返回预期响应
【发布时间】:2019-10-09 08:24:05
【问题描述】:

需要的详细信息

我正在为我的项目使用 Dialogflow 实现以及 Firebase 实时数据库。我的数据库有一个结构:

让我先告诉你数据库的结构。它有一个 ATM(自动柜员机)列表,其中包含完整的地址和其他必要信息。我需要获取所有具有给定值Pin number 的 ATM,而给定值Pin number 将来自 API 响应。这个密码就是那台 ATM 的邮政编码。很明显,使用Pin 号码,可以有很多台自动取款机。

我的问题

下面是我用来进行 API 调用和 Firebase 数据库查询的代码,接收到的 Pin 值作为 API 的响应。

var ref = db.ref("atms/");

var response = await axios.get('some URL');   //API call 
var zipcodes = response.data.search_results;   // Array of Pin values
console.log(zipcodes[2].postal_code);  //This prints a Pin value 721304, which confirms successful response from API

ref.orderByChild("Pin").equalTo(zipcodes[2].postal_code).on("child_added", function(snapshot) {   //this line is the problem
   console.log(snapshot.val());
});

但是上面带有equalTo(zipcodes[2].postal_code)的代码没有给出任何响应。但是当我用equalTo(721304) 替换它时,它确实给出了预期的响应。需要强调的是,equalTo(zipcodes[2].postal_code)equalTo(721304) 必须相同。

我需要使用这个equalTo(zipcodes[2].postal_code) 只是因为我将在这个查询上运行一个循环,这是因为需要一次查询很多很多Pin

能否请您帮助我了解这里出了什么问题以及如何实施我在这里尝试做的事情?如果有任何后续问题,请告诉我。

【问题讨论】:

  • 你确定zipcodes[2].postal_code 是数字类型吗??
  • 它打印的值是 721304..所以是的
  • 如果你这样做console.log(typeof zipcodes[2].postal_code);会得到什么?
  • 天哪!它返回字符串
  • 在下面查看我的答案

标签: firebase firebase-realtime-database dialogflow-es dialogflow-es-fulfillment


【解决方案1】:

console.log(typeof zipcodes[2].postal_code); 所示(见上面的cmets),zipcodes[2].postal_code 的值不是数字类型而是字符串类型。需要将其转换为数字,如下:

ref.orderByChild("Pin").equalTo(Number(zipcodes[2].postal_code)).on("child_added", function(snapshot) {   //this line is the problem
   console.log(snapshot.val());
});

【讨论】:

  • 一个真正的传奇,真正了解每一种可能性:) 谢谢 :)
猜你喜欢
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 2021-06-05
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2018-02-11
相关资源
最近更新 更多