RxJS/Observable 的 flatMap 可以返回 Observable 或数组

9

请问为什么.flatMap操作符可以接受返回Observablearray的函数?

官方文档中提到:

flatMap操作符通过将您指定的函数应用于源Observable发出的每个项目来转换Observable,其中该函数返回本身发出项目的Observable。

为什么它也可以返回数组

例如,这两种方式都是有效的:

obs$.flatMap((data) => {
    return [];
});

obs$.flatMap((data) => {
    return new Observable<string>();
});

但这并不起作用:
obs$.flatMap((data) => {
    return 1;
});

4
Observables可以被视为随时间分散的数组,因此展开一个数组就像展开同步的observable。1既不是数组也不是observable,所以当然不能起作用。 - cartant
flatMapmergeMap的别名。查看文档,你会发现该函数可以返回一个observable、一个promise或类似数组的值:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-mergeMap - cartant
1
具体而言,它可以返回一个 ObservableInput:http://reactivex.io/rxjs/class/es6/MiscJSDoc.js~ObservableInputDoc.html - cartant
谢谢,这帮助我理解了很多,我没有意识到它是“ObservableInput”。那么.flatMap如何返回Observables数组呢?或者这不可能吗? - Dolan
1
如果您在可观察对象数组上调用flatMap,则会得到一个可观察的嵌套可观察对象 - 称为高阶可观察对象。有运算符可以进一步展开这样的高阶可观察对象。请查看mergeAllconcatAll。此外,如果这些链接帮助您了解问题,您可能需要考虑添加自答案 - cartant
1个回答

7

谢谢!那帮助我更好地理解了它。 - Dolan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接