Облачные функции Firebase. - PullRequest
0 голосов
/ 14 июня 2019

Пройдя простые примеры работавших облачных функций, я хочу протестировать что-то более сложное.Я создал таблицу (BTDevices) в базе данных реального времени Firebase, заполненную несколькими данными:

enter image description here

Теперь я хочу, чтобы моя облачная функция использовалаMAC-адреса для получения полей userId.Это фрагмент моей облачной функции JavaScript:

var getUserIdPromisesArray = [];

for (var i = 0; i < nearbyMACsArray.length; i++) {
  var tmpNearbyMAC = nearbyMACsArray[i];
  var promise = admin.database().ref(`${DB_BT_DEVICES}/${tmpNearbyMAC}/userId`).once('value');
  getUserIdPromisesArray.push(promise);
}

return Promise.all(getUserIdPromisesArray).then(results => {
  results.forEach(result => {
    var userId = result.val();
    console.log('result.val() = ', result.val());
  });
});

Из других сообщений, таких как это , это и это , я знаю, что мне нужносначала создайте все мои обещания, а когда они будут выполнены, затем обработайте извлеченные данные.Таким образом, цикл for выполняет итерацию соседнего массива MACsArray, который содержит MAC-адреса, создает обещание и передает его в getUserIdPromisesArray.

Затем я ожидаю завершения всех обещаний и перебираю массив «результатов» для вывода значения чтения, но журнал облачной функции показывает нулевое значение в одном из выходных данных:

output log

Есть идеи, почему это происходит?Я что-то упускаю с обещаниями?Спасибо.

1 Ответ

1 голос
/ 14 июня 2019

Согласно документации, val () возвращает ноль, если в запрошенном месте нет данных. Скорее всего, это происходит. Это вряд ли проблема с вашими обещаниями.

...