equalTo()无法返回预期的响应

时间:2019-10-09 08:24:05

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

所需的详细信息

我正在将Dialogflow实现与Firebase实时数据库一起用于我的项目。我的数据库具有以下结构: enter image description here

首先让我告诉您有关数据库的结构。它有一个ATM(自动柜员机)清单,上面有完整的地址和其他必要的信息。我需要获取具有给定值Pin的所有ATM,给定值Pin的ATM将来自API响应。此Pin号码不过是该ATM的邮政编码。因此很明显,使用Pin号,可以有很多ATM。

我的问题

下面是我用来进行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

能否请您帮助我了解此处的问题以及如何实施此处要执行的操作?如有任何后续问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

console.log(typeof zipcodes[2].postal_code);所示(请参见上面的注释),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());
});