尝试更新Firebase实时数据库时发出警告

时间:2020-09-29 16:59:43

标签: reactjs firebase react-native firebase-realtime-database

我有一个带有Firebase的应用程序,用户可以在其中登录他们的帐户。唯一的问题是,当我要注销时,我想删除一些以前保存在数据库中的信息,但是由于某种原因,数据库没有得到更新,并且出现此警告消息:

错误:[数据库/权限被拒绝]客户端无权访问所需数据

我的猜测是,这是因为更新代码没有足够的时间执行指令。我的代码如下所示(由按下按钮触发):

onPressLogout = () => {
  const { navigation } = this.props;
  const userId = auth().currentUser.uid;

  database().ref(`users/${userId}`).update({ tokens: '' });
  auth().signOut().then(() => navigation.navigate('Auth'));
}

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

似乎注销发生在update操作之前,然后失败,因为用户不再登录。

最简单的方法是等到写入完成后再退出。您可以使用await

await database().ref(`users/${userId}`).update({ tokens: '' });
auth().signOut().then(() => navigation.navigate('Auth'));

或更经典的then()

database().ref(`users/${userId}`).update({ tokens: '' }).then(()=> {
  auth().signOut().then(() => navigation.navigate('Auth'));
})

答案 1 :(得分:0)

React是异步的,因此它不等待行以100%执行,而是执行其他代码。 await的使用可以完成此任务:

async onPressLogout(){
  const { navigation } = this.props;
  const userId = auth().currentUser.uid;

  await database().ref(`users/${userId}`).update({ tokens: '' });
  auth().signOut().then(() => navigation.navigate('Auth'));
}