Confundido sobre la asignación de la variable RxJava

Tengo una function que toma una cadena de nombre de usuario y devuelve si el usuario ya existe en una database MongoDB. Soy nuevo en el model RxJava y Retrofit, y estoy confundido acerca de dos para asignar variables una vez que me suscribo al object 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 } 

Los loggings funcionan perfectamente, y todas las llamadas se ejecutan correctamente, sin embargo, el usuarioExists nunca cambia, y permanece en falso. Supongo que esto se debe a la class anónima que creé en el método de suscripción, pero aún no puedo identificar el motivo.