Firebase:推送到实时数据库后立即删除数据

时间:2019-08-13 16:31:44

标签: javascript reactjs firebase firebase-realtime-database

这里是第一次海报!

当我尝试使用ReactJS和Firebase实时数据库构建一个小的运动管理器应用程序时,我遇到了Firebase push()方法的问题。

页面上有几个元素,它们被单击后将数据推入数据库,如下所示:

const planRef = firebase.database().ref("plan");
const currentExName = e.currentTarget.firstChild.textContent;
const exercise = {
     name: currentExName,
     type: e.currentTarget.children[1].textContent,
     user: this.state.user.displayName
};
planRef.push(exercise);

此外,如果再次单击该元素,则将其从数据库中删除,如下所示:

planRef.orderByKey().on("value", snapshot => {
            let exercises = snapshot.val();
            for (let ex in exercises) {
                if (exercises[ex].name === currentExName) {
                    planRef.child(ex).set(null);
                }
            }
        });

只要我从数据库中删除最后一点数据时,不尝试将某些内容推入数据库,就可以正常工作。在这种情况下,它会立即被删除。

Data getting removed

摘要:

  1. 使用ref.push()
  2. 将数据写入实时数据库
  3. 使用ref.child(child).set(null)删除数据(我之前尝试过remove(),同样的问题)
  4. 尝试再次将相同数据推入数据库,这导致数据在写入数据库后立即被删除

到目前为止,关于此类问题我什么都找不到,所以我想我可能在某个地方犯了一个错误。让我知道提供的信息是否足够。

谢谢。

1 个答案:

答案 0 :(得分:0)

删除子项是异步操作。我猜这里发生的是删除操作比新的写入操作花费更多的时间。如果要再次用同一键写,则需要等待。

planRef.child(ex).set(null).then(() => {
   planRef.child(ex).push(new);
});

或使用异步/等待:

await planRef.child(ex).set(null);
planRef.child(ex).push(new);

让我知道它是否有效。