js自製無阻塞sleep函式

2021-10-09 16:58:48 字數 1238 閱讀 6189

與大多數語言不同,js中無自帶sleep函式,但是可以通過promise與await實現。

製作sleep函式,首先要編寫乙個名為sleep的promise函式,promise函式在執行resolve的時候結束,所以如果在promise函式內部,將resolve包裹在定時器中,函式執行的時間就變得可控。

function sleep(interval) )

}

在vue中,該函式可直接定義在methods中。

上面講到,sleep是乙個執行時間可控的函式,但也是乙個非同步函式(詳查promise)。

如果把非同步函式直接放置在主函式中,是不會起到休眠主函式效果的。這時需要使用await,指明等待非同步完成後繼續執行。

async與await是es7中提供的處理非同步的方法,await必須在async中使用。

async function test()

}}

**效果為外層從第一層開始,等待內層輪完後外層切換下一層。

控制台

[work] 20:50:58 外層 1

[work] 20:50:58 外層 1 內層await 0

[work] 20:51:01 外層 1 內層await 1

[work] 20:51:04 外層 1 內層await 2

[work] 20:51:07 外層 1 內層await 3

[work] 20:51:10 外層 1 內層await 4

[work] 20:51:10 外層 2 at js/setinterval.js:12

[work] 20:51:10 外層 2 內層await 0

[work] 20:51:13 外層 2 內層await 1

[work] 20:51:16 外層 2 內層await 2

[work] 20:51:19 外層 2 內層await 3

promise函式可包含在普通方法中放在methods中,直接呼叫,也可將其放置在鉤子函式中直接使用

await需要包裹在async中,所以需要乙個async型別的function的外層包裹

async函式定義後不執行,需要跟隨呼叫函式,也可使用(function(){})()自呼叫

在vue中往往要對data做出修改,當希望對方法外部的this.data或者其他值做出修改時,可使用箭頭函式做this穿透,使函式內外this保持一致

形式:(引數列表)=>(函式體)

SOCKET無阻塞連線

socket無阻塞連線 下面的 實現socket 無阻塞 connect include int apientry shared connect nonb int skt,const struct sockaddr sa,int salen,int timeout ioctlsocket skt,f...

無阻塞套接字技術 講解 ZZ

標準的網路程式設計模式有乙個缺點,就是如果 socker 類的 i o 方法不能立即處理,i o 方法就會阻塞 block 阻塞是指程式停止執行,等待個特殊語句的完成。如當乙個程式執行到 receive 方法的時候,程式會停止執行,直到在套接字上讀到的資料為止。如果遠端裝置不傳送任何資料,程式就不能...

CLOS網路嚴格無阻塞條件證明

假設 clos網路構造如下 第一級為k個nxm的交換單元 第二級 中間級 為m個kxk個交換單元 第 為k個mxn個交換單元 對於某次請求從第一級的某個交換單元s的埠a輸入,從第 的某個交換單元q的埠b輸出。此時稱正在被s使用的第二級的交換單元的集合為t s 正在被q使用的第二級的交換單元的集合為t...