在构建查询以选择 Firebase 中的最新数据时,将选择所有数据,而不是参数中指定的数量。我注意到这个问题也存在于第一条消息选择中。其他查询参数我不知道,我没有使用过。
export const messagesRef = ref(database, `messages/`)
export async function getMessages() {
return new Promise((resolve) => {
const data = []
const lastMessages = query(messagesRef, limitToFirst(10))
const snapshot = get(lastMessages).then(() => {
Object.entries(snapshot).forEach(([key, value]) => {
data.push({ ...value, key: key })
})
resolve(data)
})
})
}
老实说,我什至不知道在这里做什么。我查看了 firebase 文档,但不明白我做错了什么。我询问了 copylot 并在 stackoverflow 中进行了挖掘。
您的代码在分配回调之前就访问
snapshot
inside。我的猜测是,您在那里看到过时的数据,例如:上次分配快照时的数据(我的猜测是:包含所有子数据)。
您的代码也包含一些反模式,所以这里我将如何实现
getMessages
:
export async function getMessages() {
const data = []
const lastMessages = query(messagesRef, limitToFirst(10))
const snapshot = await get(lastMessages);
snapshot.forEach((child) => {
data.push({ ...child.val(), key: child.key })
})
return data;
}
您的变化:
snapshot
值。Promise
,而是使用 Firebase 已返回的承诺。forEach
来循环结果,而不是 Object.Entries
(它对 Firebase 一无所知)。