日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RxJs 操作符 withLatestFrom 在 SAP 电商云 Spartacus UI 中的应用

發布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RxJs 操作符 withLatestFrom 在 SAP 电商云 Spartacus UI 中的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看下面這段代碼:

getSupportedDeliveryModes(): Observable<DeliveryMode[]> {return this.checkoutStore.pipe(select(CheckoutSelectors.getSupportedDeliveryModes),withLatestFrom(this.checkoutStore.pipe(select(getProcessStateFactory(SET_SUPPORTED_DELIVERY_MODE_PROCESS_ID)))),tap(([, loadingState]) => {if (!(loadingState.loading || loadingState.success || loadingState.error)) {this.loadSupportedDeliveryModes();}}),pluck(0),shareReplay({ bufferSize: 1, refCount: true }));}

調用 withLatestFrom 的 Observable 對象,起到主導數據產生給下游觀察者的作用。作為參數被調用的 Observable 對象只能貢獻新的數據,而不能控制數據的產生時機。

換句話說,上述 Spartacus 的例子,CheckoutSelectors.getSupportedDeliveryModes Observable 對象是向下游產生數據的主導者,而 select(getProcessStateFactory(SET_SUPPORTED_DELIVERY_MODE_PROCESS_ID 只是數據片段的貢獻者。

下圖第 54 行的語法是元祖,元祖也是數組,但各個元素的數據類型不一定必須相同。

第 54 行的 loadingState,代表的就是從 ngrx store 里取出的 setDeliveryModeProcess 的狀態。第 55 行的語義是,如果狀態是 loading 或者 成功,或者是 error ,則不做任何事情,否則調用 58 行的 loadSupportedDeliveryModes, 進行 mode 的加載。

這里我們巧妙的使用了 withLatestFrom, 將 delivery mode 的加載狀態,引入到 getSupportedDeliveryModes 的交互之中。

再看另一個例子:

protected buildRestoreSavedCartEvents<T>(mapping: ActionToEventMapping<T>): () => void {const eventStream$ = this.getAction(mapping.action).pipe(switchMap((action) =>of(action).pipe(withLatestFrom(this.multiCartService.getCart(action.payload.cartId)))),map(([action, cart]) =>createFrom(mapping.event as Type<T>, {...action.payload,cartCode: cart.code,saveCartName: cart.name,saveCartDescription: cart.description,...(cart.saveTime && { saveTime: cart.saveTime }),})));

這里調用 withLatestFrom 的 Observable 對象的類型為 Action,包含一個類型為 string 的字段 type 和類型為 any 的 payload 字段。

貢獻數據即傳入 withLatestFrom 操作符函數的輸入參數,類型為 146 行 this.multiCartService.getCart 的返回參數,類型為 Cart,如下圖所示:

因此,在 pipe 操作符下游即 149 行代碼里,map 的輸入參數為元祖:[ action, cart], 兩個元素的數據類型分別為:

以及:

值得一說的是,combineLatest 和 withLatestFrom 有本質的區別。在前者的調用里,所有參與運算的 Observable 地位都是均等的,只要有任意一個發生變化,combineLatest 都會從所有的輸入 Observable 對象中拿出最后一次產生的數據,組合成數組的數據類型,傳遞給下游。

更多Jerry的原創文章,盡在:“汪子熙”:

總結

以上是生活随笔為你收集整理的RxJs 操作符 withLatestFrom 在 SAP 电商云 Spartacus UI 中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。