gpt4 book ai didi

javascript - Firebase 检查值是否为空

转载 作者:行者123 更新时间:2023-12-03 00:42:23 25 4
gpt4 key购买 nike

我正在这里编写一个简单的编码,但我有点卡住了。

基本上代码会检查用户名是否存在,所以我使用这些代码;

数据结构;

"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,因此值不再为 null。

实际上,如果用户名已经存在,则它可以正常工作,但如果不存在,则在一小会儿(我假设在检索数据期间)它再次变得不为空。

因此输出如下(如果输入空用户名):

good to go
username exists

我不明白为什么它再次给我“用户名存在”?有什么解决方案或更好的方法。

感谢您的帮助..

最佳答案

我假设您正在使用 angularfire2图书馆。this.afDatabase.object('<objectAddress>')返回 FirebaseObjectObservable (顺便说一句,这已被弃用)。这个Observable每当该对象内部发生变化时就会发出值。

就您而言,一切都很合乎逻辑。

  1. 您订阅 FirebaseObjectObservable
  2. 可观察对象发出数据库中该对象的当前值
  3. 最初的值为 null ,这样你就得到了“good to go”的输出
  4. 您调用this.createProfile();我想现在会创建配置文件并更改您在数据库中订阅的对象。设置其 "username"到新创建的id .
  5. 由于数据库中的对象已更改,FirebaseObjectObservable释放出新的值(value)。并且您的订阅功能再次运行。这次data.$value不是null因为它现在包含新创建的 id。

如果您只想获取一次对象的当前值,您可以使用 .take(1) RxJS 运算符。或.pipe(take(1))取决于 RxJS 版本。这确保了 observable 仅发射一次。

关于javascript - Firebase 检查值是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53396457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com