我不确定我是否对云功能(尤其是Firestore部分)有正确的认识。
如下面的代码片段所示,我正在监听对特定文档的写入,并尝试同时更新其他文档。一旦完成所有操作,客户端将检索所有testProducts。但是,一旦检索完成,就不会下载最新的信息“ 2222”,并且仍与旧数据一起显示。我注意到了三个奇怪的结果。
对此表示感谢。
exports.updateProduct = functions.firestore.document('testProducts/1111').onWrite((change, context) => {
const newValue = change.after.data();
return admin.firestore().doc('testProducts/2222').update({
description: newValue.name
}).then((value) =>{
console.log('Hello World');
return 'status 200';
});
});
答案 0 :(得分:0)
您的代码应该可以使用,但是testProducts/2222
文档应该已经存在于数据库中。 update()
方法的文档说:
如果将更新应用于不存在的文档,更新将失败。
您将通过创建,修改或删除testProducts/1111
文档来触发Cloud Function,请在此处查看文档:{{3}}。
onWrite
:当onCreate
,onUpdate
或onDelete
为 触发。
但是,您可以对代码进行一些修改,以使其返回由异步https://firebase.google.com/docs/functions/firestore-events方法返回的promise,而不是返回值。
exports.updateProduct = functions.firestore.document('testProducts/1111').onWrite((change, context) => {
const newValue = change.after.data();
return admin.firestore().doc('testProducts/2222').update({
description: newValue.name
})
});
请注意,在使用onWrite()
触发器在后台触发Cloud Function的情况下,客户端不应该收到任何响应:该过程在后台进行。因此,'status 200'
永远不会返回给客户端,并且如果您不向数据库发出新查询“ '2222'
的最新信息将不会下载”。
如果要在客户端进行响应,则可以:
update()
方法设置一个侦听器,以侦听对testProducts/2222
文档的更改。使用监听器,“ '2222'
的最新信息”将自动“下载”,以重新使用您的单词。onSnapshot()
或HTTP Cloud Function。