Firebase (Google) 云功能 - Debounce/Throttle database.onWrite() #AskFirebase

Mic*_*mas 5 javascript firebase firebase-realtime-database google-cloud-functions

设想

我在路径中为每个用户存储了文档documents/${documentId}

目标

我想解析它们并在文档更改时更新该文档的索引

代码

import Functions from 'firebase-functions'

export writeTrigger = Functions
  .database
  .ref('/document/{documentId}')
  .onWrite(
    async event => {
      const data = event.data.val()
      const { documentId } = event.params
      // assume that updateIndex function exists
      updateIndex(documentId, data)
    }
  )
Run Code Online (Sandbox Code Playgroud)

问题

在文档中输入的每个字母都会调用此函数

总长DR

限制/反跳 Firebase 云函数(database.onWrite)的最佳方法是什么,以便它不会在每次更改时触发?

Dou*_*son 4

您的函数将在您指定的路径上或下的每次更改时被调用。目前没有办法阻止这种情况。

不要将每个更改写入数据库,而是尝试在客户端上批量更改并批量写出它们,或者定期保存状态。

或者,给客户端一些其他方式来指示该函数是时候开始工作了,也许是文档中的某个字段,并仅侦听该字段的更改。这是一个仅在字段done更改时触发的事件:

export writeTrigger = Functions
  .database
  .ref('/document/{documentId}/done')
  .onWrite(...)
Run Code Online (Sandbox Code Playgroud)

只需确保取消设置该值,以便客户端可以指示应处理另一组更改。