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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

node mysql timeout_nodejs之setTimeout

發(fā)布時(shí)間:2024/9/15 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 node mysql timeout_nodejs之setTimeout 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問(wèn)題一:如何實(shí)現(xiàn)一個(gè)循環(huán)定時(shí)執(zhí)行的邏輯?

比如我有1000個(gè)請(qǐng)求,我想每一秒發(fā)一個(gè)。

const request = function(){

for(let i=0;i<1000;i++){

setTimeout(function(){

console.log('doRequest:'+i)

},1000)

}

}

request()

上面代碼可能不能實(shí)現(xiàn)預(yù)期效果,實(shí)際是到了1s后同時(shí)發(fā)了1000條請(qǐng)求。

為什么會(huì)這樣?我們先看看setTimeout到底做了什么事情?

可參考這篇文章:https://blog.csdn.net/THEANARKH/article/details/88374203

從文章分析結(jié)果我們可以知道setTimeout實(shí)際就是提前將回調(diào)函數(shù)添加到一個(gè)定時(shí)器的回調(diào)事件隊(duì)列中,等待定時(shí)器時(shí)計(jì)時(shí)超時(shí)的時(shí)候函數(shù)才會(huì)被執(zhí)行。

所以我們這個(gè)例子中實(shí)際當(dāng)前tick只是會(huì)一次性將1000個(gè)請(qǐng)求加入到回調(diào)事件隊(duì)列中,等到1s的tick到來(lái)時(shí)一次性執(zhí)行這一組回調(diào)函數(shù)。

正確可參考實(shí)現(xiàn)代碼:

const sleep = function (ms){

return new Promise(resolve => setTimeout(resolve, ms))

}

const request = async function(){

for(let i=0;i<1000;i++){

console.log('request:'+i)

await sleep(1000)

}

}

通過(guò)promise+setTimeout實(shí)現(xiàn)一個(gè)sleep,然后使用await等待promise的timeout到時(shí)間再繼續(xù)執(zhí)行下一次for循環(huán)。

問(wèn)題2:setTimeout(fn,0)和setImmediate到底誰(shuí)先執(zhí)行?

const doTestImmediate = function(){

console.log('doTestImmediate')

}

const doTestTimeout = function(){

console.log('doTestTimeout')

}

setImmediate(doTestImmediate)

setTimeout(doTestTimeout,0)

運(yùn)行結(jié)果1:

ideojjdeMacBook-Pro-6:asmp-ai-api videojj$ node test.js

doTestTimeout

doTestImmediate

運(yùn)行結(jié)果2:

videojjdeMacBook-Pro-6:asmp-ai-api videojj$ node test.js

doTestImmediate

doTestTimeout

總體上結(jié)果是隨機(jī)的,不一定誰(shuí)先執(zhí)行。具體原因可參考這篇文章:

https://segmentfault.com/a/1190000013102056?utm_source=tag-newest

程序運(yùn)行后看執(zhí)行到目標(biāo)代碼時(shí)機(jī),setTimeout是以毫秒為單位計(jì)時(shí),如果執(zhí)行的時(shí)機(jī)已經(jīng)過(guò)了1ms則setTimeout先執(zhí)行,如果沒(méi)到則setImmediate先執(zhí)行。

總結(jié)

以上是生活随笔為你收集整理的node mysql timeout_nodejs之setTimeout的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。