我现在正在使用flatMap
,因为它可以同步处理异步代码(就像一个接一个地处理以前结果中的值一样),但我不知道它是怎么做到的。文档似乎没有解释此行为是运算符的一部分。
在 RxJS 文档中,flatMap
定义为:
将每个源值投影到一个可观察量,该可观察量合并到 输出可观察。
我需要在管道中处理observable
、promise
和synchronous
代码的组合。大多数情况下,管道数据取决于其前身:
from(
// asyncrhonously fetch data from server
fetchDataAsync(credentials) // returns an Observable
).pipe(
flatMap((data) => {
// process the data with a promise
return from(processDataAsync(data))
}),
flatMap((data) => {
// sanitize the data with synchronous fn
return of(sanitizeDataSync(data))
}),
flatMap((data) => {
// store the data in local storage with a promise
return from(storeDataAsync(data))
})
)
flatMap
有效,但我不知道如何或为什么。如何在其他运算符中找到此行为?
基本上,我希望像典型的异步函数一样运行的可观察流的好处。这样做的RX-way
是什么?
async function fn() {
// asyncrhonously fetch data from server
const fetched = await fetchDataAsync(credentials).toPromise()
// process the data with a promise
const processed = await processDataAsync(fetched)
// sanitize the data with synchronous fn
const santized = sanitizeDataSync(processed)
// store the data in local storage with a promise
return await storeDataAsync(santized)
}
flatMap
运算符不会同步执行代码:每次它收到类型 Observable
的事件时,它都会订阅它并在同一个返回Observable
中发出它的事件。顺便说一下,它在最新版本中已重命名为 mergeMap
,这更好地描述了它的行为。