SAP 电商云 Spartacus UI 设置 Delivery Mode 的时序分析和一个竞争条件问题分享
(1) State.loading這個值存儲在什么地方的?
(2) 什么時候變?yōu)?true?什么時候變?yōu)?false?
Component/service 需要消費存儲在 store 中的數(shù)據(jù),通過 Store 和 Selector 完成。
例子:
Component 需要改變 store 中的數(shù)據(jù)時,不能直接修改 store,通過 action 和 store:246 行
Action 觸發(fā) reducer,一個有限狀態(tài)自動機。不能直接修改狀態(tài),只能根據(jù)當(dāng)前狀態(tài),返回新的狀態(tài)。
Loading:true
從 loading:false 跳轉(zhuǎn)到 loading: true, 中間經(jīng)過了哪些步驟?
只有 Cart stable 和 checkout 數(shù)據(jù)加載完成時,才能調(diào)用 HTTP PUT:
從上面的代碼能看出:
Wait?
在 3G 網(wǎng)絡(luò)下,我勻速點了8次:第一次點擊的是 standard delivery
console.log 顯示每一次點擊都會觸發(fā)一次 HTTP 請求,但不一定是即時觸發(fā),有排隊現(xiàn)象。
所以,當(dāng)我點了 radio input 之后,如果不滿足 cart stable = true,checkout loading = false 的前提,HTTP PUT 就發(fā)不出去,loading 狀態(tài)就沒辦法變?yōu)?true.
問題轉(zhuǎn)而變?yōu)檠芯?cart stable 和 checkout loading 的變化規(guī)律。
成功設(shè)置 DeliveryMode 之后,就觸發(fā) Cart 加載:
Cart 加載完畢之后,就會通過代碼第59行加載 checkout detail.
因此,delivery mode(HTTP PUT)和 cart,checkout loading,是三個串行的 HTTP 操作。
第一次點擊發(fā)生在 t0,如果第二次點擊發(fā)生在 t3 之后,則沒有任何問題。
如果第二次點擊發(fā)生在 t1~t3 之間(3G 網(wǎng)絡(luò)),就會出現(xiàn)問題。
最終解決方案:
用 delivery mode,cart stable, checkout loading 三個因素同時控制。
更多Jerry的原創(chuàng)文章,盡在:“汪子熙”:
總結(jié)
以上是生活随笔為你收集整理的SAP 电商云 Spartacus UI 设置 Delivery Mode 的时序分析和一个竞争条件问题分享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为 Mate 60 标准版工程机出样,
- 下一篇: SAP 电商云 Spartacus UI