Cloud Functions for Firebase:如何访问我刚从 firebase 获得的数组?
Cloud Functions for Firebase: How to access an array I have just got from firebase?
我正在我的函数中从 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;
根据您设置数据库的方式,它可能会略有不同!
让我知道它是否有效:)
我正在我的函数中从 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;
根据您设置数据库的方式,它可能会略有不同!
让我知道它是否有效:)