按顺序链接多个 Observable
chaining multiple Observables sequentially
链接 5-6 个按顺序执行的单个可观察对象的最佳做法是什么?
例如我有 Single1->Single2-> ... ->Single6.
Single2 取决于Single1 的结果。 Single3 取决于 Single2 结果等
我一直在使用嵌套 flatMap
但是代码变得很长而且可读性很低。
这个案例的最佳指南是什么?
您不需要嵌套 flatMap
调用,您可以简单地将它们链接起来并获得清晰的 Observable 流链:
single1
.flatMap(new Func1<Item1, Single<Item2>>() {
@Override
public Single<Item2> call(Item1 obj) {
return getSingle2(obj);
}
})
.flatMap(new Func1<Item2, Single<Item3>>() {
@Override
public Single<Item3> call(Item2 obj) {
return getSingle3(obj);
}
})
.flatMap(new Func1<Item3, Single<Item4>>() {
@Override
public Single<Item4> call(Item3 obj) {
return getSingle4(obj);
}
})
.flatMap(new Func1<Item4, Single<Item5>>() {
@Override
public Single<Item5> call(Item4 obj) {
return getSingle5(obj);
}
})
.flatMap(new Func1<Item5, Single<Item6>>() {
@Override
public Single<Item6> call(Item5 obj) {
return getSingle6(obj);
}
});
使用 lambda 可以变得非常整洁:
single1
.flatMap(this::getSingle2)
.flatMap(this::getSingle3)
.flatMap(this::getSingle4)
.flatMap(this::getSingle5)
.flatMap(this::getSingle6);
链接 5-6 个按顺序执行的单个可观察对象的最佳做法是什么? 例如我有 Single1->Single2-> ... ->Single6.
Single2 取决于Single1 的结果。 Single3 取决于 Single2 结果等
我一直在使用嵌套 flatMap
但是代码变得很长而且可读性很低。
这个案例的最佳指南是什么?
您不需要嵌套 flatMap
调用,您可以简单地将它们链接起来并获得清晰的 Observable 流链:
single1
.flatMap(new Func1<Item1, Single<Item2>>() {
@Override
public Single<Item2> call(Item1 obj) {
return getSingle2(obj);
}
})
.flatMap(new Func1<Item2, Single<Item3>>() {
@Override
public Single<Item3> call(Item2 obj) {
return getSingle3(obj);
}
})
.flatMap(new Func1<Item3, Single<Item4>>() {
@Override
public Single<Item4> call(Item3 obj) {
return getSingle4(obj);
}
})
.flatMap(new Func1<Item4, Single<Item5>>() {
@Override
public Single<Item5> call(Item4 obj) {
return getSingle5(obj);
}
})
.flatMap(new Func1<Item5, Single<Item6>>() {
@Override
public Single<Item6> call(Item5 obj) {
return getSingle6(obj);
}
});
使用 lambda 可以变得非常整洁:
single1
.flatMap(this::getSingle2)
.flatMap(this::getSingle3)
.flatMap(this::getSingle4)
.flatMap(this::getSingle5)
.flatMap(this::getSingle6);