在firebase中将catch()与.on()一起使用时出错

use*_*242 3 javascript firebase firebase-realtime-database angular

我正在使用以下代码在Firebase中检索数据:

  this.managerList = this.afDB.database.ref('users').orderByChild('managedby').equalTo(uID);
      this.managerList.on('value', (snapshot) => {
        this.managerIdArray = Object.keys(snapshot.val());
        this.managerNameArray = snapshot.val();
       });
Run Code Online (Sandbox Code Playgroud)

每当返回null值时,我都会收到一个错误:错误:未捕获(承诺中):TypeError:无法读取未定义的属性............。

当我尝试在上面添加catch()时,它说不能使用catch()或then()。如何使用catch()报错。

Fra*_*len 6

Firebase的on()方法将侦听器附加到数据,然后将其与当前值一起触发一次,并在每次值更改时触发一次。这意味着您的回调可以被多次调用。由于承诺只能解决一次或失败一次,因此on不会返回承诺。

看来您的查询现在不返回任何结果,因此snapshot.val()返回null。然后Object.keys(null)抛出一个错误。所以像这样的事情更接近:

this.managerList = this.afDB.database.ref('users').orderByChild('managedby').equalTo(uID);
this.managerList.on('value', (snapshot) => {
  if (snapshot.exists()) {
    this.managerIdArray = Object.keys(snapshot.val());
    this.managerNameArray = snapshot.val();
  };
});
Run Code Online (Sandbox Code Playgroud)