欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript Rxjs mergeMap 的使用場合

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

注意:

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

當需要展平內部 observable 但想要手動控制內部訂閱的數量時,是 mergeMap 極佳的使用場合。

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

一個典型的例子就是 SAP 電商云購物車里不同行項目的金額,可以并行地進行增減操作。

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

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

看一個例子:

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 是一個函數,它能把任何傳入的輸入參數,包裹成一個 Observable,并且這個 Observable 并不是立即 emit 數據,而是延遲 500 毫秒。

mergeMap 接收一個函數作為輸入參數,這個函數的輸入參數就是通過 pipe 鏈接 mergeMap 的 Observable 里包含的元素,即 MouseEvent;project 返回的數據類型是一個新的 Observable,包含了屏幕點擊的 X 和 Y 坐標以及當前時間戳。

最后產生的輸出: 

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

相關文章

  • npm install 、npm install --save 和 npm install --save-dev的區(qū)別介紹

    npm install 、npm install --save 和&n

    這篇文章主要介紹了npm install 、npm install --save 和 npm install --save-dev的區(qū)別介紹,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • JS實現簡單的點贊與踩功能示例

    JS實現簡單的點贊與踩功能示例

    這篇文章主要介紹了JS實現簡單的點贊與踩功能,涉及javascript針對頁面元素動態(tài)操作相關實現技巧,需要的朋友可以參考下
    2018-12-12
  • 使用微信SDK自定義分享的方法

    使用微信SDK自定義分享的方法

    這篇文章主要介紹了使用微信SDK自定義分享的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • javascript中call,apply,callee,caller用法實例分析

    javascript中call,apply,callee,caller用法實例分析

    這篇文章主要介紹了javascript中call,apply,callee,caller用法,結合實例形式分析了javascript中call,apply,callee,caller功能、使用方法及相關操作注意事項,需要的朋友可以參考下
    2019-07-07
  • JS實現的計數排序與基數排序算法示例

    JS實現的計數排序與基數排序算法示例

    這篇文章主要介紹了JS實現的計數排序與基數排序算法,結合實例形式簡單分析了計數排序與基數排序的原理與JS實現技巧,需要的朋友可以參考下
    2017-12-12
  • JS對象添加屬性和方法的多種方式

    JS對象添加屬性和方法的多種方式

    本文介紹了如何使用JavaScript對象添加屬性和方法,通過實例演示了如何給對象添加屬性,以及如何在對象中定義方法,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • JavaScript 編程引入命名空間的方法

    JavaScript 編程引入命名空間的方法

    JavaScript 編程引入命名空間的方法...
    2007-06-06
  • 淺談一個webpack構建速度優(yōu)化誤區(qū)

    淺談一個webpack構建速度優(yōu)化誤區(qū)

    這篇文章主要介紹了淺談一個webpack構建速度優(yōu)化誤區(qū),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Javascript實現登錄框拖拽效果

    Javascript實現登錄框拖拽效果

    這篇文章主要為大家詳細介紹了Javascript實現登錄框拖拽效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • uniapp開發(fā)H5使用formData上傳文件解決方案

    uniapp開發(fā)H5使用formData上傳文件解決方案

    我們很多時候上傳文件就是使用FormData,然而uniapp默認不支持FormData類型數據的上傳,下面這篇文章主要給大家介紹了關于uniapp開發(fā)H5使用formData上傳文件的相關資料,需要的朋友可以參考下
    2023-12-12

最新評論