Javascript Firebase:数据在推送到实时数据库后立即被删除
第一次海报在这里 当我试图用ReactJS和Firebase实时数据库构建一个小的练习组织者应用程序时,我遇到了Firebase push()方法的一个问题 我的页面上有两个元素,单击后将数据推送到数据库,如下所示: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:
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)之前最初使用的。