我有一个带有Firebase的应用程序,用户可以在其中登录他们的帐户。唯一的问题是,当我要注销时,我想删除一些以前保存在数据库中的信息,但是由于某种原因,数据库没有得到更新,并且出现此警告消息:
错误:[数据库/权限被拒绝]客户端无权访问所需数据
我的猜测是,这是因为更新代码没有足够的时间执行指令。我的代码如下所示(由按下按钮触发):
onPressLogout = () => {
const { navigation } = this.props;
const userId = auth().currentUser.uid;
database().ref(`users/${userId}`).update({ tokens: '' });
auth().signOut().then(() => navigation.navigate('Auth'));
}
任何帮助表示赞赏。
答案 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'));
}