RxJava:将单个值映射到一组 运行 并发的 Completable
RxJava: map Single value to a set of Completable that run concurrently
预期:给定一个单一的和多个可完成的,return一个可完成的。
Result: Cannot resolve method
'merge(io.reactivex.rxjava3.core.Completable,
io.reactivex.rxjava3.core.Completable,
io.reactivex.rxjava3.core.Completable)'
我目前正在尝试设置用于注册用户的流程。但是,我似乎找不到任何关于将 Single 的结果映射到一组可完成的文档。
这里的想法是在某个数据库中创建一个用户,检索响应数据并调用不同的 API。每当我尝试使用可完成的合并方法执行此操作时,它都会抛出上述错误。
例如,我们有一个 Single,它为用户 (createUser) 和 returns 用户或错误设置基本信息,我们有多个 Completable(s) (updateProfile, sendEmail, updateUser ) 对 API 和 return 完成状态或错误执行某些操作。谁能解释为什么会这样?
我的尝试:
auth.createUser(field1, field2)
.flatMapCompletable(response ->
Completable.merge(
// Error occur here
auth.updateProfile(response, updates),
auth.sendEmail(response),
db.updateUser(response, user)
)
)
.subscribeOn(Schedulers.io());
我现在没有 IDE,但快速查看 the RxJava3 code for Completable
显示
@CheckReturnValue
@NonNull
@SchedulerSupport(SchedulerSupport.NONE)
public static Completable merge(@NonNull Iterable<@NonNull ? extends CompletableSource> sources) {
...
}
所以你需要传递一个 Completable
的列表。像
Completable.merge(
Arrays.asList(
auth.updateProfile(response, updates),
auth.sendEmail(response),
db.updateUser(response, user)
)
)
预期:给定一个单一的和多个可完成的,return一个可完成的。
Result: Cannot resolve method 'merge(io.reactivex.rxjava3.core.Completable, io.reactivex.rxjava3.core.Completable, io.reactivex.rxjava3.core.Completable)'
我目前正在尝试设置用于注册用户的流程。但是,我似乎找不到任何关于将 Single 的结果映射到一组可完成的文档。 这里的想法是在某个数据库中创建一个用户,检索响应数据并调用不同的 API。每当我尝试使用可完成的合并方法执行此操作时,它都会抛出上述错误。
例如,我们有一个 Single,它为用户 (createUser) 和 returns 用户或错误设置基本信息,我们有多个 Completable(s) (updateProfile, sendEmail, updateUser ) 对 API 和 return 完成状态或错误执行某些操作。谁能解释为什么会这样?
我的尝试:
auth.createUser(field1, field2)
.flatMapCompletable(response ->
Completable.merge(
// Error occur here
auth.updateProfile(response, updates),
auth.sendEmail(response),
db.updateUser(response, user)
)
)
.subscribeOn(Schedulers.io());
我现在没有 IDE,但快速查看 the RxJava3 code for Completable
显示
@CheckReturnValue
@NonNull
@SchedulerSupport(SchedulerSupport.NONE)
public static Completable merge(@NonNull Iterable<@NonNull ? extends CompletableSource> sources) {
...
}
所以你需要传递一个 Completable
的列表。像
Completable.merge(
Arrays.asList(
auth.updateProfile(response, updates),
auth.sendEmail(response),
db.updateUser(response, user)
)
)