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

Javascript Firebase:数据在推送到实时数据库后立即被删除,javascript,reactjs,firebase,firebase-realtime-database,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:

第一次海报在这里

当我试图用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);
                }
            }
        });
此外,如果再次单击该元素,则会将其从数据库中删除,如下所示:

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);
                }
            }
        });
只要我刚从数据库中删除了最后一点数据时不尝试将某些内容推送到数据库中,这就可以正常工作。在这种情况下,它会立即被移除

总结:

  • 使用
    ref.push()
  • 使用
    ref.child(child).set(null)
    删除数据(我以前尝试过
    remove()
    ,同样的问题)
  • 尝试再次将相同的数据推送到数据库,这会导致数据在写入数据库后立即被删除
  • 到目前为止,我找不到关于这类问题的任何信息,所以我想我可能在某个地方犯了一个错误。如果提供的信息不够,请告诉我


    提前感谢。

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

    planRef.child(ex).set(null).then(() => {
       planRef.child(ex).push(new);
    });
    
    或使用异步/等待:

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

    让我知道它是否有效。

    您是否尝试使用
    remove()
    方法而不是
    set(null)
    ?是的,我尝试过。这是我在使用.child(child).set(null)之前最初使用的。