js方法佇列的一次實踐

2022-05-18 08:22:00 字數 1299 閱讀 8158

場景:

專案中有乙個需求,發布故事線,發布會呼叫乙個介面,改介面返回進度條的必要資訊,進度資訊由mqtt推送過來,在正常網路情況下,介面返回速度應該比mqtt推送先一步完成,但是在網路慢的情況下,介面就遲於mqtt推送的速度。

(mqtt會推送多條訊息過來,執行多次)。這樣會造成進度條卡死的現象。

解決辦法:當有進度條例項時,直接執行進度條的方法,若沒有進度條例項時,將方法存到方法佇列內,待進度條例項建立時,執行佇列內的方法。完美解決mqtt後介面執行順序的問題。當然時機要把握好,我指的是執行佇列還是執行方法。看情況而定。

下面是一段**:

storypublishqueue.js

//

故事線發布佇列

export function

storypublishqueue()

//出隊操作

this.pop = function

()

//獲取隊首

this.getfront = function

()

//獲取隊尾

this.getrear = function

()

//清空佇列

this.clear = function

()

//獲取隊長

this.size = function

()

//執行故事線發布佇列

this.trigger = function

()) arr = ;//

清空佇列

}}

掛在到vue例項例項上:

import  from '@/utils/storypublishqueue.js';//

故事線發布佇列

vue.prototype.storypublishqueue = new storypublishqueue();//

建立乙個發布故事線佇列例項

mqtt返回訊息內呼叫:

let vm = this

; let queue = function

()

if(vm.$aiprogress.find ('storypush'))

else

介面內呼叫:

bus.$emit('storypush',);//

建立進度條例項

if(this

.storypublishqueue.size())

JS 一天執行一次的方法

一天執行一次,很常用的場景,思路就是利用乙個標識,今天沒有這個標識就執行操作,然後新增標識,後續判斷標識存在就不再執行相應的操作。具體實現是新增乙個cookie,第一次沒有這個cookie,就執行操作,同時新增乙個到第二天凌晨過期的cookie。如下 function doone key,metho...

巢狀事務的一次實踐

最近在乙個專案中,需要實現自動對賬功能,收銀機會定時對比本地和遠端的訂單,遠端發現缺少的,會自動補全。所謂補全,就是批量插入缺失的訂單。基於這個場景,就存在乙個細節的問題,因為插入訂單涉及兩個表,如果某些情況下,乙個表插入失敗,訂單插入事務需要回滾。但是不能回滾之前插入的訂單資料,顯然這裡就設計子事...

一次元件化的實踐

更新 1.mvvm 可以將網路層轉移到viewmodel 層中,這樣就不需要將網路層抽離了,因為本來就沒和 控制器耦合。2.每次使用蜂巢的時候 控制器一定要實現 服務的協議,不然蜂巢會崩,還很難找到原因 3.蜂巢方案 雖然分離了控制器業務的耦合,但是引入了protocol 協議的耦合。同時需要維護 ...