我正在试验firebase-queue。我看到了消毒的选择。它在文档中描述为
sanitize - 指定数据对象是否传递给处理 函数被清理为保留供队列使用的内部密钥。 默认为true。
这是什么意思?
我因未指定{ sanitize : false }
答案 0 :(得分:2)
当设置sanitize
选项时,队列清理(或清除)提供给处理函数的输入,使其类似于原始客户端放入队列的输入,并且不包含任何内容。通过队列本身的实现添加的密钥。
但是,如果您依赖于由队列添加的密钥(通常是以下划线开头的密钥,例如_id
),而不是原始客户端,则需要设置sanitize: false
因此,这些密钥会返回到您的功能中,而不是undefined
。
您可以通过仅执行console.log(data)
的简单处理功能清楚地看到差异。
关于默认情况下删除这些键的原因的快速说明:直接读取或写入该位置(通过将undefined
传递到您可能会做的事情。客户端SDK child()
方法而不是data._id
)通常是来自工作者本身的坏主意,因为直接执行的写入不受队列中广泛的事务逻辑的保护以防止竞争条件。如果您可以将工作隔离到从提供的data
字段获取输入,并将输出返回到resolve()
功能,那么您可能会有更好的时间来扩展您的队列。