当链接从Observable.create()创建的Observable时,RxJava用户onNext / onError / onComplete没有被调用

我试图实现一个基本的RxJava链接调用

  1. 从Facebook Graph API获取用户名和照片
  2. 使用该信息然后注册我的后端服务

所以我尝试使用下面的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(),它将起作用。 这是为什么?

我可能在这里做错了什么?