Firebase检查值是否为空

时间:2018-11-20 15:36:25

标签: javascript angular firebase ionic-framework

我正在这里进行简单的编码,但是有点卡住了。

基本上,该代码将检查用户名是否存在,因此我将使用这些代码;

数据结构;

"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

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

感谢您的协助。

1 个答案:

答案 0 :(得分:1)

我假设您正在使用angularfire2库。 this.afDatabase.object('<objectAddress>')返回FirebaseObjectObservable(不推荐使用)。每当对象内部发生任何更改时,此Observable就会发出值。

在您的情况下,一切工作都很合乎逻辑。

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

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