Firebase云功能promise.all

时间:2019-06-14 14:42:13

标签: javascript firebase firebase-realtime-database promise google-cloud-functions

在介绍了适用的云功能的简单示例之后,我想测试更复杂的功能。我在Firebase实时数据库中创建了一个表(BTDevices)表,其中填充了少量数据:

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());
  });
});

thisthisthis之类的其他帖子中,我知道我需要首先创建我的所有诺言,当它们完成后,再处理获取的数据。因此,for循环迭代包含MAC地址的附近MACsArray,创建一个Promise,并将其推送到getUserIdPromisesArray。

然后,我等待所有诺言完成并迭代“结果”数组以打印读取值,但是云函数日志在输出之一中显示空值:

output log

关于为什么发生这种情况的任何想法?我是否怀有诺言? 谢谢。

1 个答案:

答案 0 :(得分:1)

根据文档,当请求的位置没有数据时,val()返回null。这很可能是怎么回事。您的诺言不太可能有问题。