gpt4 book ai didi

javascript - Firestore 查询不起作用

转载 作者:行者123 更新时间:2023-12-03 02:58:53 25 4
gpt4 key购买 nike

Firestore

上面显示的是我的 firestore 收藏。

我正在尝试使用我已部署的 Google Cloud Function 从此集合中获取数据:

const admin = require('firebase-admin')
const functions = require('firebase-functions')

module.exports= function(request, response){
let results = []
admin.firestore().collection('news_stories')
.get()
.then(docs => docs.map(doc => results.push(doc.data())))
.catch(e => resoponse.status(400).send(e))

response.status(200).send(results)
}

当我运行上述函数时,我得到一个:

Error: could not handle the request

我也尝试以这种方式运行该函数,看看它是否有效。

  module.exports=  function(request, response){ 
let ref = admin.firestore().collection('news_stories')
.get()
.then(docs => response.status(200).send(docs))
.catch(e => resoponse.status(400).send(e))
}

该函数返回一个 this JSON 对象:

return object

没有有关数据或任何文档的信息。

我使用此函数将集合上传到 firestore 数据库:

const functions = require('firebase-functions')
const admin = require('firebase-admin')

module.exports = function(request,response){
if(!request.body.data){
response.status(422).send({error: 'missing data'})
}
let data = request.body.data
data.map(item => {
admin.firestore().collection('news_stories').add({item})
})
response.status(200).send('success!')
}

不知道我做错了什么。为什么该函数不返回任何文档?

最佳答案

从 Firestore 异步检索数据。当您将响应发送回调用者时,尚未从 Firestore 检索结果。

最容易看到这一点的方法是用三个日志语句替换大部分代码:

console.log("Before starting get");
admin.firestore().collection('news_stories')
.get()
.then(() => {
console.log("In then()");
});
console.log("After starting get");

最好在常规 Node.js 命令中运行上述命令,而不是在 Cloud Functions 环境中,因为后者实际上可能会在加载数据之前终止该命令。

上面的输出是:

Before starting get

After starting get

In then()

这可能不是您期望的顺序。但由于数据是从 Firestore 异步加载的,因此回调函数之后的代码可以立即继续。然后,当数据从 Firestore 返回时,您的回调将被调用,并且可以根据需要使用数据。

解决方案是将所有需要数据的代码移至 then() 处理程序:

const admin = require('firebase-admin')
const functions = require('firebase-functions')

module.exports= function(request, response){
admin.firestore().collection('news_stories')
.get()
.then(docs => {
let results = []
docs.map(doc => results.push(doc.data()))
response.status(200).send(results)
})
.catch(e => resoponse.status(400).send(e))
}

关于javascript - Firestore 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47493186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com