【发布时间】:2017-12-28 20:20:17
【问题描述】:
有人可以向我解释为什么.flatMap 运算符可以接受返回Observable 或array 的函数吗?
FlatMap 运算符通过应用函数来转换 Observable 您为源 Observable 发射的每个项目指定的,该函数返回一个本身发射项目的 Observable。
为什么它也能返回一个数组?
例如,这些都是有效的:
obs$.flatMap((data) => {
return [];
});
obs$.flatMap((data) => {
return new Observable<string>();
});
但这不起作用:
obs$.flatMap((data) => {
return 1;
});
【问题讨论】:
-
Observables 可以被认为是随时间分布的数组,因此扁平化数组就像扁平化同步的 observable。
1既不是数组也不是 observable,所以当然不行。 -
flatMap是mergeMap的别名。查看文档,您将看到该函数可以返回可观察的、承诺的或类似数组的值:reactivex.io/rxjs/class/es6/… -
具体可以返回一个
ObservableInput:reactivex.io/rxjs/class/es6/… -
谢谢,这对我的理解很有帮助,没想到是
ObservableInput。那么.flatMap如何返回一个 Observable 数组呢?还是那不可能? -
如果你调用
flatMap在一个 observable 数组上,你会得到一个 observable 的 observable - 称为高阶 observable。有一些算子可以进一步展平这些高阶可观测量。查看mergeAll和concatAll。此外,如果这些链接有助于您理解内容,您可能需要考虑添加 self answer。
标签: angular rxjs observable flatmap