equalTo () не может вернуть ожидаемый ответ - PullRequest
0 голосов
/ 09 октября 2019

Необходимые детали

Я использую выполнение Dialogflow для моего проекта вместе с базой данных Firebase в реальном времени. Моя база данных имеет структуру: enter image description here

Позвольте мне сначала рассказать вам о структуре базы данных. У него есть список банкоматов (банкомат) с полным адресом и другой необходимой информацией. Мне нужно получить все банкоматы с заданным значением Pin number, а заданное значение Pin number будет получено из ответа API. Этот ПИН-код является ничем иным, как почтовым индексом этого банкомата. Очевидно, что с номером 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 одновременно.

Не могли бы вы помочь мне понять, что здесь не так и как мне реализовать то, что я пытаюсь сделать здесь? Пожалуйста, дайте мне знать, если возникнут дополнительные вопросы.

1 Ответ

1 голос
/ 09 октября 2019

Как показано 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());
});
...