我的firebase函数从查询中返回一个结果,但如果数据库发生更改,它不会更新。如何更新以返回实时更新?我试着在函数中放入一个观察器,但它只启动了一次。
getCurrentMessage.js//firebase函数
const admin = require('../variables').admin
module.exports = async (req, res) => {
const db = admin.firestore()
const now = new Date()
const timestampNow = now / 1000
const location = req.query.location
try {
const messagesRef = db.collection('messages')
const snapshot = await messagesRef
.where('displayTo', '>=', timestampNow)
.where('location', '==', location)
.get()
if (snapshot.empty) {
console.log('No matching documents.')
return res.status(404).send(`No current message found.`)
}
snapshot.forEach((doc) => {
if (doc._fieldsProto.displayFrom.integerValue <= timestampNow) {
return res.status(200).send(doc) // return 1st to match
} else {
return res.status(404).send('No current message found.')
}
})
} catch (e) {
console.log(`Error: ${e.message}`)
}
}
函数调用
// get current message
axios
.get(`${dir}/getCurrentMessage?location=${location}`)
.then((res) => {
this.setState({
customMessage: res.data,
})
})
.catch((e) => {
console.log(`Error: ${e.message}`)
})
使用云函数无法实现您想要实现的功能。云函数只能向客户端返回一个响应。它不能发送多个响应,也不能将结果流式传输到客户端。一旦在响应对象上调用send()
,请求就会终止,并且不能执行任何其他操作。
如果您希望客户端接收实时更新,那么它应该直接查询数据库,或者您应该使用支持websocket或其他流媒体技术的后端。