订阅是取消订阅返回 false,即使在调用 onComplete 后也是如此



我正在尝试以反应式方式转换回调,为此,我使用以下代码

Observable.create(
    subscriber -> ref.authWithPassword(email, password, new FirebaseAuthResultHandler() {
      @Override public void onAuthenticated(AuthData authData) {
        subscriber.onNext(authData);
        subscriber.onCompleted();
      }
      @Override public void onAuthenticationError(FirebaseError firebaseError) {
        subscriber.onError(firebaseError.toException());
      }
    }));

这是一次性回调,所以一旦我得到结果,我希望任何订阅都完成。

因此,如果我订阅了这个观察者,并且在 onComplete 是调用之后,我调用 isUnsubscribe() 我应该得到 true,但我没有。

Subscription subscribe = userProvider.login("some@gmail.com", "12345678")
        .subscribe();
    while (!subscribe.isUnsubscribed()) {
      Thread.sleep(100);
    }

在上面的代码中,我们永远不会出圈。除非出现错误,否则将调用onError。

我做错了什么还是这是预期的行为?

您的假设是正确的(订阅应在 onComplete 后取消订阅),但(据我所知)您的代码将在同一线程上运行。

因此,Thread.sleep可能不允许运行其他操作。与其使用睡眠,不如在subscribe之前附加一个.doOnUnsubscribe()以检查何时取消订阅?

我尝试使用另一个线程正确设置它,然后检查订阅的状态,它返回 isUnsubscribed(true)

所以问题一定是我从同一个线程调用它。即使我正在获取回调的日志。