Firebase云函数使用当前值而不是最初调用函数时的值

时间:2019-09-11 15:47:17

标签: firebase google-cloud-functions

不确定使用Firebase云功能是否还可以做到这一点。

假设,我想在特定集合中的所有文档上触发云功能onCreate。 创建后,云功能应在另一个集合中添加另一个文档。 传递手动创建的文档中的值。

当然可以!!

export const createAutomaticInvoice = functions.firestore.document('users/{userId}/lessons/{lesson}').onCreate((snap, context) => {

    let db = admin.firestore();
    let info = snap.ref.data()    

    db.collection('toAdd').add({
        info: info
    })


})

但是,如果我随后在users/{userId}/lessons/中创建文档并立即更改info的值,则在触发云功能之前,云功能将假定的info的旧值更改为它的那个。

这是预期的行为吗?对我来说,它绝对不是我所假定的,它在运行时采用这些值。

如何使示例工作正常?

1 个答案:

答案 0 :(得分:1)

这是预期的行为-创建该文档后,该函数将尽快执行。快照将始终包含文档最初创建时的内容。不必等待该文档在将来的某个时刻发生更改,也不会尝试查询该文档,以防它可能已更改。

如果您要处理文档更新,则还应该使用onUpdate触发器来了解是否发生这种情况。