我不明白这之间是否有区别:
Observable.pipe(
switchMap((res) => {
...
}),
switchMap((res) => {
...
})
);
Run Code Online (Sandbox Code Playgroud)
和这个:
Observable.pipe(
switchMap((res) => {
...
}).pipe(
switchMap((res) => {
...
}),
)
);
Run Code Online (Sandbox Code Playgroud)
您能否帮助我了解数据处理方式是否存在差异?
谢谢
正如所写的,没有什么区别,但是如果您以后想在管道中添加更多项目,这可能很重要。例如catchError- 在第一种情况下,如果将其添加到管道的末尾,那么它将捕获管道的任一步骤引发的错误,但在第二个示例中,您可以将其放在第一个管道内,在内部管道之后switchMap它只会捕获内部操作的错误。
哦,我刚刚读了@serrulien的评论,他是对的,你的第二个管道不能放在你放置它的地方,它会被放在第一个管道的主体内switchMap,例如:
Observable.pipe(
switchMap((res) => {
return someObservable().pipe(
switchMap((res) => {
...
})
})
);
Run Code Online (Sandbox Code Playgroud)
俗话说,剥猫皮有多种方法。
RxJS#pipe 只是函数组合的翻转。事实证明(就像加法一样),组合是结合性的。
\n对于加法:
\nx + (y + z) = (x + y) + z
对于组合:
\nx \xe2\x88\x98 (y \xe2\x88\x98 z) = (x \xe2\x88\x98 y) \xe2\x88\x98 z
这是什么意思?嗯,您可以将管道函数视为数学方程中的括号。
\n这些都是相同的表达式,只是括号位于不同的位置:(并且由于管道 RxJS 运算符是关联的,因此括号在哪里并不重要)
\n// 1\nstream.pipe(\n switchMap(/*...*/),\n concatMap(/*...*/),\n delay(/*...*/),\n toArray()\n);\n\n// 2\nstream.pipe(\n switchMap(/*...*/),\n concatMap(/*...*/)\n).pipe(\n delay(/*...*/),\n toArray()\n);\n\n// 3\nstream.pipe(\n switchMap(/*...*/)\n).pipe(\n concatMap(/*...*/)\n).pipe(\n delay(/*...*/)\n).pipe(\n toArray()\n);\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3767 次 |
| 最近记录: |