对 RxJava 变量赋值感到困惑

Confused about RxJava variable Assignment

我有一个函数接受用户名字符串和 returns 无论用户是否已经存在于 MongoDB 数据库中。我是 RxJava 和 Retrofit 模型的新手,我对订阅 Observable 对象后如何分配变量感到困惑。

fun handleUsername(username: String): Boolean {
    var userExists = false

    UserServiceProvider.getUserService().getUserByUsername(username)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(object : Observer<User> {
                override fun onComplete() {
                    Log.d("\nAppLog: ", "Completed Operation")
                }

                override fun onNext(t: User?) {
                    Log.d("AppLog: ", t.toString())
                    userExists = true
                }

                override fun onError(e: Throwable?) {
                    Log.d("\nERROR: ", "Completed Operation")
                }

                override fun onSubscribe(d: Disposable?) {
                    Log.d("AppLog: ", "Subscribed successfully ")
                }

            })
    return userExists
}

日志工作完美,所有调用都正确执行,但是 userExists 永远不会改变,并且保持错误。我猜这是因为我在订阅方法中创建了匿名 class,但我仍然无法确定原因。

1 方法是您直接在实际需要 userExists 布尔值的函数中订阅从 UserServiceProvider.getUserService().getUserByUsername(username) 获得的 Observable。

如果在多个地方需要,就会有代码重复(订阅部分)。但它会解决你的问题。