如果我使用`.push();`要装入一个新的空Firebase实时数据库数据,我必须在写入之前解决这个问题吗



我继承了一些NodeJs代码,这些代码重复使用.push();来创建一个新的空数组(node/leaf/无论FB术语是什么,但它是一个数组/列表(。

紧接着,代码循环并开始向其写入条目

关于had,我很紧张,因为它看起来像是一种代码气味,代码的质量甚至对我来说都是明显的业余——我主要是一个嵌入式C++的家伙。

代码正确地将读取视为异步,并等待promise解析:

admin
.database()
.ref(url)
.once("value", (snapshot) => { ...

但是,推送不会等待。

我最担心的是,编写数组成员的请求可能会在创建数组之前到达FB,而像这样的定时错误绝对是最难调试的。

另一方面,这是如此一致,以至于原始编码人员可能知道一些我不知道的东西。

代码有问题吗?

看到您询问的实际代码会很有用,但我猜您有这样的东西:

newRef = rootRef.push();
newRef.set('some value');

第一行实际上还没有向数据库写入任何内容。事实上,这是一个纯粹的客户端操作,只需创建一个新的唯一ID并返回对该ID的引用。因此,不需要在第一行中await调用,因为它是同步的。

第二行确实对数据库执行写入操作,是异步的,因此如果您希望在写入完成后启动下一个操作,则需要await它。


这两条线可以合并为:

rootRef.push('some value');

现在,push()操作确实执行对数据库的写入,如果您想在写入之后执行另一个操作<em],则必须await。>

最新更新