即使在调用onComplete之后,订阅isUnsubscribed返回false

时间:2016-02-20 22:58:48

标签: rx-java subscription observable

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

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()我应该成为现实,但我不会。

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

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

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

2 个答案:

答案 0 :(得分:1)

您的假设是正确的(订阅应该在onComplete之后取消订阅)但是(从我看到的)您的代码将在同一个线程上运行。

因此Thread.sleep可能不允许运行其他操作。您可以在.doOnUnsubscribe()之前附加subscribe来检查取消订阅的时间,而不是使用睡眠?

答案 1 :(得分:0)

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

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