我试图实现一个基本的RxJava链接调用
所以我尝试使用下面的flatMap
getProfileFromFacebook().flatMap { user -> userRepository.createUser(user) }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ Log.d("test", "onNext") },
{ Log.d("test", "onError") },
{ Log.d("test", "onComplete") })
奇怪的是,订阅者中的所有日志记录都没有打印出来。
所以我尝试用Observable.just(User())替换getProfleFromFacebook()。这次它工作,onNext打印出来。所以我猜问题出在getProfleFromFacebook()。这是它的实现
fun getProfileFromFacebook(): Observable<User> {
return Observable.create<User>({ emitter ->
val request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken()) {
_, _ ->
emitter.onNext(User())
emitter.onCompleted()
}
val parameters = Bundle()
parameters.putString("fields", "name,picture")
request.parameters = parameters
request.executeAsync()
}, Emitter.BackpressureMode.BUFFER)
}
我已经通过添加更多日志记录进行检查,发现flatMap函数确实使用用户对象获取事件但由于某种原因,它似乎没有实际执行来自userRepository.createUser的Observable返回( )。
如果我将Graph API调用从executeAsync()更改为executeAndWait(),它可以正常工作。那是为什么?
我在这里可能做错了什么?