我正在尝试为Firebase编写一个函数,以在另一种类型的文档更新时更新特定集合内的所有文档。
functions.firestore.document('/accounts/{accountId}/resources/{resourceId}')
.onUpdate((change, context) => {
const resource = context.params.resourceId;
admin.firestore().collection('/accounts/'+account+'/tasks')
.where('resourceId', '=', resource).get().then(snapshot => {
snapshot.forEach(doc => {
doc.update({
fieldA: 'valueA',
fieldB: 'valueB'
});
});
return true;
})
.catch(error => {
console.log(error);
});
});
这不起作用,但是我不知道该怎么做,这是我第一次为Firebase创建函数。
答案 0 :(得分:0)
以下应该可以解决问题(未测试):
functions.firestore.document('/accounts/{accountId}/resources/{resourceId}')
.onUpdate((change, context) => {
const resource = context.params.resourceId;
return admin.firestore().collection('/accounts/'+account+'/tasks')
.where('resourceId', '=', resource).get().then(snapshot => {
const promises = [];
snapshot.forEach(doc => {
promises.push(doc.ref.update({
fieldA: 'valueA',
fieldB: 'valueB'
}));
});
return Promise.all(promises)
})
.catch(error => {
console.log(error);
return null;
});
});
注意:
return
中的return admin.firestore()....
forEach()
中,您得到
QueryDocumentSnapshots
,所以您必须做doc.ref.update()
Promise.all()
,因为您并行执行了几个异步方法。如Doug在其评论中建议的那样,您应该观看Firebase视频系列中有关“ JavaScript Promises”的3个视频:https://firebase.google.com/docs/functions/video-series/