簡體   English   中英

flatMap如何同步執行代碼?

[英]How does flatMap execute code synchronously?

我現在正在使用flatMap因為它可以同步處理異步代碼(如與先前結果中的值一一對應),但是我不知道它是如何做到的。 該文檔似乎並未解釋此行為是操作員的一部分。

在RxJS文檔上, flatMap定義為:

將每個源值投影到一個Observable,將其合並到輸出Observable中。

我需要在管道中處理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做的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 ,從而更好地描述了其行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM