Firebase 如何从云功能访问云Firestore?

Firebase 如何从云功能访问云Firestore?,firebase,google-cloud-functions,google-cloud-firestore,Firebase,Google Cloud Functions,Google Cloud Firestore,我试图从我的云Firestore中检索数据,最终用于GraphQL服务器,但现在我只是返回JSON进行测试。我正在使用下面的代码访问Firestore,但似乎没有返回任何数据。我知道该函数工作正常,因为“开始测试”和“最终测试推送”在JSON响应中如预期的那样出现 我也尝试过使用ADMINSDK说明,但没有效果。有人能看出我做错了什么吗 import * as admin from "firebase-admin" import * as functions from "firebase-fun

我试图从我的云Firestore中检索数据,最终用于GraphQL服务器,但现在我只是返回JSON进行测试。我正在使用下面的代码访问Firestore,但似乎没有返回任何数据。我知道该函数工作正常,因为“开始测试”和“最终测试推送”在JSON响应中如预期的那样出现

我也尝试过使用ADMINSDK说明,但没有效果。有人能看出我做错了什么吗

import * as admin from "firebase-admin"
import * as functions from "firebase-functions"

admin.initializeApp(functions.config().firebase)
const db = admin.firestore()

const authors = [{ key: "start test" }]
db.collection("authors")
    .get()
    .then(snapshot => {
        snapshot.forEach(doc => {
            const data = {
                id: doc.id,
                firstName: doc.firstName,
                lastName: doc.lastName
            }
            authors.push(data)
            authors.push({ key: "test in loop" })
        })
    })
authors.push({ key: "final test push" })

export default authors
非常感谢

编辑:我应该注意,这是一个单独的getter文件。云功能本身在别处,并且工作正常

编辑#2:云函数定义

import authorsArray from "./firestore"

const testServer = express()
testServer.get("*", (req, res) => {
    res.setHeader("Content-Type", "application/json")
    res.send(JSON.stringify({ data: authorsArray }))
})
const test = https.onRequest(testServer)

尝试更改代码,如下所示;因为快照数据是
doc.data()
,id是
doc.id

db.collection("authors")
    .get()
    .then(snapshot => {
        snapshot.forEach(doc => {
            const data = {
                id: doc.id,
                firstName: doc.data().firstName,
                lastName: doc.data().lastName
            }
            authors.push(data)
            authors.push({ key: "test in loop" })
        })

请查看

我在这里没有看到云函数定义,以供参考。你不能只是将任意代码推送到云函数执行——你必须声明一个触发器,它定义了函数应该执行的时间。这是你
index.js
文件的全部内容吗?对不起,我应该更清楚一点:这是一个单独的getter文件。云函数本身是在其他地方定义的,运行良好。谢谢!它现在正在工作,但只在硬刷新后的第二次加载上工作。Firestore的数据也出现在“最终测试推送”之后。我猜这是因为异步获取?是的,没错。:)如何让它在返回响应之前等待数据?我不确定在哪里添加async/await,无论是在getter文件中还是在云函数本身(添加到主帖子中),我认为如果您向上移动最后一行。它将等待每个循环。或者您可以使用以下选项检查计数nr:
snapshot.forEach((doc,countnr)=>…
仍然存在相同的问题,需要进行几次刷新才能将Firestore数据包含在结果中..:(