最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript Rxjs mergeMap 的使用場合

 更新時間:2022年07月01日 10:49:18   作者:? JerryWang_sap?  ?  
這篇文章主要介紹了JavaScript Rxjs mergeMap 的使用場合,mergeMap 接收一個函數(shù)作為輸入?yún)?shù),這個函數(shù)的輸入?yún)?shù)就是通過 pipe 鏈接 mergeMap 的 Observable 里包含的元素

注意:

  • flatMap 是 mergeMap 的別名。
  • 如果一次只能激活一個內(nèi)部訂閱,請使用 switchMap.
  • 如果內(nèi)部 observables 的發(fā)射和訂閱順序很重要,請使用 concatMap.

當(dāng)需要展平內(nèi)部 observable 但想要手動控制內(nèi)部訂閱的數(shù)量時,是 mergeMap 極佳的使用場合。

例如,當(dāng)使用 switchMap 時,每個內(nèi)部訂閱在源發(fā)出時完成,即任意時間段只允許一個活動的內(nèi)部訂閱。相比之下,mergeMap 允許同時激活多個內(nèi)部訂閱。因此,mergeMap 最常見的用例之一是不應(yīng)取消的請求,這些請求被認(rèn)為是寫入而不是讀取。

一個典型的例子就是 SAP 電商云購物車?yán)锊煌许椖康慕痤~,可以并行地進行增減操作。

請注意,如果這些寫入必須保持順序,則 concatMap 是更好的選擇。比如數(shù)據(jù)庫的寫操作。

由于 mergeMap 一次維護多個活動的內(nèi)部訂閱,因此可能會由于長期存在的內(nèi)部訂閱造成內(nèi)存泄漏。一個基本的例子是,如果使用內(nèi)部計時器或 dom 事件流映射到可觀察對象。在這些情況下,如果仍然希望使用 mergeMap,一個好辦法是利用另一個運算符來管理內(nèi)部訂閱的完成,比如考慮 take 或 takeUntil。當(dāng)然還可以使用 concurrent 參數(shù)限制一次活動內(nèi)部訂閱的數(shù)量。

看一個例子:

import { fromEvent, of } from 'rxjs';
import { mergeMap, delay } from 'rxjs/operators';
// faking network request for save
const saveLocation = location => {
  return of(location).pipe(delay(500));
};
// streams
const click$ = fromEvent(document, 'click');

click$
  .pipe(
    mergeMap((e: MouseEvent) => {
      return saveLocation({
        x: e.clientX,
        y: e.clientY,
        timestamp: Date.now()
      });
    })
  )
  // Saved! {x: 98, y: 170, ...}
  .subscribe(r => console.log('Saved!', r));

saveLocation 是一個函數(shù),它能把任何傳入的輸入?yún)?shù),包裹成一個 Observable,并且這個 Observable 并不是立即 emit 數(shù)據(jù),而是延遲 500 毫秒。

mergeMap 接收一個函數(shù)作為輸入?yún)?shù),這個函數(shù)的輸入?yún)?shù)就是通過 pipe 鏈接 mergeMap 的 Observable 里包含的元素,即 MouseEvent;project 返回的數(shù)據(jù)類型是一個新的 Observable,包含了屏幕點擊的 X 和 Y 坐標(biāo)以及當(dāng)前時間戳。

最后產(chǎn)生的輸出: 

到此這篇關(guān)于JavaScript Rxjs mergeMap 的使用場合的文章就介紹到這了,更多相關(guān)JS Rxjs mergeMap 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

武汉市| 西充县| 余庆县| 府谷县| 连南| 天峨县| 蓬安县| 金溪县| 广平县| 盈江县| 晋江市| 武汉市| 海晏县| 梧州市| 鄂尔多斯市| 广宁县| 麻阳| 哈密市| 金门县| 连云港市| 长沙市| 漯河市| 都兰县| 新龙县| 耒阳市| 绥芬河市| 北票市| 玛多县| 壤塘县| 浮梁县| 钟祥市| 米林县| 石屏县| 随州市| 新安县| 永春县| 茂名市| 南和县| 慈溪市| 衡南县| 贞丰县|