我有一个返回Observable<Foo>
的函数。此函数依赖于另外两个函数,必须按顺序调用(函数2取决于函数1的输出)并分别返回Observable<Bar>
和Observable<Foo>
。我发现我可以用两种方式编写main函数,一种更简洁,另一种更易读,而且我不确定哪种风格可以用于其他类似函数。
更简洁:
createFoo(): Observable<Foo> {
return this.step1()
.flatMap((result: Bar) => {
const processedResult = { ..., result }
return this.step2(processedResult)
});
}
更具可读性:
createFoo(): Observable<Foo> {
return this.step1()
.map((result: Bar) => {
const processedResult = { ..., result }
return processedResult;
})
.flatMap((processedResult: any) => {
return this.step2(processedResult);
})
.map((result: Foo) => {
return result;
});
}
第一种变体只使用一种映射功能,通常噪声较小,但我也发现一眼就能看出实际发生的事情更加困难。如果我有两个以上需要链接的可观察量,它似乎也不会很好地扩展。
第二种变体更嘈杂,有三次函数调用,但我也发现它更好地解释了输出哪些类型在流的过程中处理数据的位置和方式。它还使得flatMap与常规地图的区别更加清晰,这是我在直接理解时遇到的一些麻烦。
RxJs的约定是否有利于其中一种?或者这是个人偏好吗?