js非同步函式佇列

2022-08-12 06:30:32 字數 1456 閱讀 2959

場景:

做直播,會有入場訊息,入場特效,使用者如果有坐騎,需要給他展示幾秒鐘的坐騎特效,如果幾個人同時進場,那該怎麼展示呢?這時候就會想到settimeout函式,對,思路不錯,但是,非同步函式佇列怎麼實現呢?直接上**:

var queue =function() ;

queue.prototype =,

wait: function(ms) ,

dequeue: function() ;

if (typeof el == "

number

") , el);

} else

if (typeof el == "

function

")

else}}

};

例子:如果a,b差不多同時進來;

c在a,b還沒完全出佇列的時候,進來的;

d在a,b,c都除了佇列之後再進來的。

var q = new

queue();

function

a()

function

b()

function

c()

function

d()

q.wait(2000);

q.queue(a);

q.wait(2000);

q.queue(b);

q.dequeue();

settimeout(

function(),3000);

settimeout(

function(),8000);

這裡我們就需要判斷什麼時候要呼叫dequeue來出佇列了。(為什麼c進佇列的時候,不需要dequeue,但是d進來的時候就需要dequeue了呢?)

但是一般我們是無法知道使用者什麼時候進場的,一般都是進佇列了,就該能出佇列,但是如果使用者是在空佇列的時候進來的,之前的遞迴呼叫dequeue就執行完了,你進來需要再執行 出佇列的操作。

於是,**應該這樣:

var q = new

queue();

function

a()

function

b()

function

c()

function

d()

q.wait(2000);

q.queue(a);

if (!q.isdequeue)

q.wait(2000);

q.queue(b);

if (!q.isdequeue)

settimeout(

function()

}, 3000);

settimeout(

function()

}, 8000);

這樣,每進一次佇列,就判斷要不要出佇列,事情就ok了。

JS非同步之巨集佇列與微佇列

js 中用來儲存待執行 函式的佇列包含 2 個不同特定的列隊 js 執行時會區別這 2 個佇列 下面這個例子可以看出promise要先於settimeout執行 settimeout 0 settimeout 0 promise.resolve 1 then value 0 promise.reso...

js 事件迴圈,非同步,事件佇列

首先,現附上我查詢資料中用到較好的一張圖 這裡面就對事件迴圈,任務佇列,非同步操作介紹的很詳細.我的理解 較為粗略的一張圖 我認為的事件迴圈的主要邏輯 1.取乙個巨集任務來執行,執行完畢,下一步.2.取乙個微任務來執行,執行完畢,再取乙個微任務來執行,直到微任務全部取完.3.更新ui渲染 概念 巨集...

JS非同步機制

js非同步機制 主線程不斷讀取執行棧中的同步事件,直到執行棧空 非同步任務結束放入任務佇列,執行棧空時主線程讀取任務佇列 任務佇列讀取完畢,回到步驟1 巨集任務與微任務 巨集任務 script 整體 settimeout setinterval ui 渲染 i o postmessage messa...