我正在这里进行简单的编码,但是有点卡住了。
基本上,该代码将检查用户名是否存在,因此我将使用这些代码;
数据结构;
"usernametouid": {
"username": "userid",
}
代码;
this.afDatabase.object(`usernametouid/${this.username}`).subscribe(data => {
const dtvl = data.$value;
if(dtvl != null) {
console.log("username exists")
} else if(dtvl == null) {
console.log("good to go")
this.createProfile();
}
在createProfile函数上获取一个uid,因此值不再为空。
如果用户名已经存在,那么实际上它可以正常工作,但是如果它不存在,那么一会儿(我假设在检索数据时)它再次变为非空。
所以输出是这样的(如果输入空用户名):
good to go
username exists
我不明白为什么它再次给我“用户名存在”?有什么解决方案或更好的方法。
感谢您的协助。
答案 0 :(得分:1)
我假设您正在使用angularfire2
库。
this.afDatabase.object('<objectAddress>')
返回FirebaseObjectObservable
(不推荐使用)。每当对象内部发生任何更改时,此Observable
就会发出值。
在您的情况下,一切工作都很合乎逻辑。
FirebaseObjectObservable
null
,因此您得到的输出为'good go go'this.createProfile();
,我想现在可以创建配置文件并更改您在数据库中预订的对象。将其"username"
设置为新创建的id
。FirebaseObjectObservable
会发出新值。您的订阅功能将再次运行。这次data.$value
不是null
,因为它现在包含新创建的ID。 如果只想获取对象的当前值一次,则可以使用.take(1)
RxJS运算符。或.pipe(take(1))
取决于RxJS版本。这样可以确保可观察对象仅发出一次。