从firebase onchange可观察到的返回

从firebase onchange可观察到的返回,firebase,firebase-realtime-database,observable,Firebase,Firebase Realtime Database,Observable,究竟如何从firebase中的on change函数返回ex-type用户的observable。通常你可以做一个.然后,但是这个函数在.on里面,所以我不知道如何从那里得到一个可观测的 注:我可以只设置该用户;到我的可观察到的里面,但是当我的应用程序启动时,我的可观察到的将是空的。因此,理想情况下,您可以将您的observable设置为以下方法返回值 this.fire.database().ref('users/' + firebaseUser.uid) .on('value

究竟如何从firebase中的on change函数返回ex-type用户的observable。通常你可以做一个.然后,但是这个函数在.on里面,所以我不知道如何从那里得到一个可观测的

注:我可以只设置该用户;到我的可观察到的里面,但是当我的应用程序启动时,我的可观察到的将是空的。因此,理想情况下,您可以将您的observable设置为以下方法返回值

 this.fire.database().ref('users/' + firebaseUser.uid)
       .on('value', function (snapshot) {
          if (snapshot.val()) {
            that.user = snapshot.val();
            return of(that.user);
          }
        });

你不能像Doug Stevenson说的那样只为方法返回一个值。您实际上想要做的是使用回调。例如:

public interface ResultsListener{

  public void onResult(User user);
  public void onFailed();

}


public void makeFirebaseCall(ResultsListener listener) {
    this.fire.database().ref('users/' + firebaseUser.uid)
           .on('value', function (snapshot) {
              if (snapshot.val()) {
                that.user = snapshot.val();
                listener.onResult(that.user);
              }
            });
}
当您调用makeFirebaseCall时,只需执行以下操作:

makeFirebaseCall(new ResultsListener() {
    @override
    void onResult(User user) {
        // do something with user
    }

    @override
    void onFailed() {
        // something failed
    }

});

希望这有帮助

在侦听器上,无法返回任何内容。他们只是倾听变化。无论你想完成什么,我认为你走错了方向。