【发布时间】:2017-02-03 03:07:57
【问题描述】:
我正在尝试使用 firebase-queue。我看到了消毒选项。它在文档中被描述为
sanitize - 指定是否将数据对象传递给处理 函数对保留供队列使用的内部键进行清理。 默认为真。
什么意思?
我因未指定 { sanitize : false } 而收到错误消息
【问题讨论】:
我正在尝试使用 firebase-queue。我看到了消毒选项。它在文档中被描述为
sanitize - 指定是否将数据对象传递给处理 函数对保留供队列使用的内部键进行清理。 默认为真。
什么意思?
我因未指定 { sanitize : false } 而收到错误消息
【问题讨论】:
当设置sanitize 选项时,队列会清理(或清理)提供给处理函数的输入,使其类似于原始客户端放置在队列中的输入,并且不包含任何添加的键通过队列本身的实现。
但是,如果您依赖队列添加的键(通常是以下划线开头的键,例如 _id),而不是原始客户端,则需要设置 sanitize: false 以便这些键返回到你的函数,它们不是undefined。
您可以通过只执行console.log(data) 的简单处理函数清楚地看到区别。
关于为什么默认删除这些键的简要说明: 直接读取或写入该位置(看起来您可能正在这样做,通过将 undefined 传递到客户端 SDK @ 987654327@ 方法而不是data._id) 通常在工作程序本身内部是一个坏主意,因为直接执行的写入不受队列中广泛的事务逻辑的保护以防止竞争条件。如果您可以将工作隔离为从提供的 data 字段获取输入,并将输出返回到 resolve() 函数,那么您可能会有更好的时间扩展队列。
【讨论】: