javascript - Firebase 的云函数 : How to access an array I have just got from firebase?

标签 javascript node.js firebase firebase-realtime-database google-cloud-functions

我正在我的函数中从 firebase 下载,但我不知道如何访问我下载的数组。

这是我的代码:

exports.messageAdded = functions.database.ref('cities/barcelona/pickUp/gamesDetailed/{gameId}/wal/{messageId}').onWrite(event => {


     const getPlayer1sIdPromise = admin.database().ref(`/cities/barcelona/pickUp/gamesDetailed/gameId/pla1`).once('value');
     const getPlayer2sIdPromise = admin.database().ref(`/cities/barcelona/pickUp/gamesDetailed/gameId/pla2`).once('value');


     const getInstanceIdPromise = admin.database().ref(`/users/usersDetailed/${receiverUid}/deviceID`).once('value');

     return Promise.all([getPlayer1sIdPromise, getPlayer2sIdPromise]).then(results => {
        const player1Ids = results[0].val();

       // PROBLEM IS HERE

        console.log(player1Ids);
        console.log(player1Ids[0]);
        console.log(results[0]);
        console.log(results[0].val()[0]);


        Promise.all([getInstanceIdPromise, getSenderUidPromise]).then(results => {
             const instanceId = results[0].val();
             const sender = results[1];

             const payload = {
             notification: {
             title: senderName,
             body: messageText,
             icon: sender.photoURL
             }
             };

             admin.messaging().sendToDevice(instanceId, payload)
             .then(function (response) {
                   console.log("Successfully sent message:", response.results);

                   console.log("Successfully sent message:", response);
                   })
             .catch(function (error) {
                    console.log("Error sending message:", error);
                    });
             });

       });

  });

在代码中我指出了问题所在。在那里我不知道如何访问player1Ids。我返回的应该是一个数组,我想访问第一个值,但我不知道该怎么做。

这完全是由于没有 JavaScript 经验,如果这是一个重复的问题,我很抱歉,但我看了看,似乎找不到一个问题,但我不太知道要搜索什么。

这是我正在使用的数据结构:

  root/
  |___ ...
  |      |___ pla1
  |      |       |___ USER_ID_HERE: userName
  |      |       |___ ...
  |      |___ pla2
  |              |___ USER_ID_HERE: userName
  |              |___ ...

在我的 Firebase 数据库中肯定有一个数组,所以希望我能找到如何访问它。

提前致谢。

最佳答案

据我所知,您的代码存在一些问题。您是否在 Firebase 控制台中检查了错误消息?它可能会给我们一些很好的提示。

首先,我看不到您的代码中定义的 getPlayer2sIdPromise,但您似乎在 Promise.all() 调用中使用它。

这可能是您的代码无法进一步执行的原因。

无论如何,你会这样做(我删除了代码的一些部分只是为了专注于重要部分):

    exports.messageAdded = functions.database.ref('cities/barcelona/pickUp/gamesDetailed/{gameId}/wal/{messageId}').onWrite(event => {

         const getPlayerOneID = admin.database().ref(`/cities/barcelona/pickUp/gamesDetailed/gameId/pla1`).once('value');

          return Promise.all([getPlayerOneID]).then(results => {

              const playerOneIdSnapshot = results[0];

              // ...And then you can access the value like so :

              const playerOneIdSnapshotValue = playerOneIdSnapshot.val();

          });

   });


现在我可以看到你的数据库结构如下所示:

root/
|___ ...
|      |___ pla1
|              |___ userId: USER_ID_HERE
|              |___ ...

在这种情况下,您将像这样访问用户 ID:

const userID = playerOneIdSnapshotValue.userId;

根据您设置数据库的方式,可能会有所不同!

让我知道它是否有效:)

关于javascript - Firebase 的云函数 : How to access an array I have just got from firebase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46216380/

相关文章:

javascript - 如何使用 JavaScript 使 div 可点击以进行触摸?

javascript - 使用 jQuery 将文本框输入限制为给定的正则表达式

javascript - Three.js - 导入带有纹理的 3d 对象

node.js - 使用 node.js 和 monogjs 的动态集合

javascript - ngFor 循环继续执行并使用 firebase 数据库在 ionic 3 中使应用程序崩溃

javascript - 何时使用 Marionette 与纯 Backbone

javascript - Express-validator 的默认 sanitizer 在链接时不起作用

javascript - Meteor MongoDB 集合无法访问 Meteor 发布

Firebase 云函数身份验证触发时间

ios - Firebase 后台和非事件通知不显示 iOS