平面映射如何同步执行代码



我现在正在使用flatMap,因为它可以同步处理异步代码(就像一个接一个地处理以前结果中的值一样),但我不知道它是怎么做到的。文档似乎没有解释此行为是运算符的一部分。

在 RxJS 文档中,flatMap定义为:

将每个源值投影到一个可观察量,该可观察量合并到 输出可观察。

我需要在管道中处理observablepromisesynchronous代码的组合。大多数情况下,管道数据取决于其前身:

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,这更好地描述了它的行为。

最新更新