第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在調(diào)用堆棧為空后,是否只有一些特定的回調(diào)在 Nodejs 的事件循環(huán)中處理?

在調(diào)用堆棧為空后,是否只有一些特定的回調(diào)在 Nodejs 的事件循環(huán)中處理?

臨摹微笑 2022-10-21 10:56:37
1.const geoCode = (address, callback)=> {setTimeout(()=> { const data ={    longitude: 0,    latitude: 0}  callback(data)  }) }geoCode('John', (data)=>{ console.log(data) })2. const forecast =(longitude, latitude, callback) =>{   const url = `https://api.openweathermap.org/data/2.5/weather?    lat=${latitude}&lon=${longitude}&appid=ff894a55e90b66e3d6cd4b2bd8ea6509`   console.log(url);   request({url, json:true}, (error, {body})=>{   if(error) {      callback('Unable to connect to the Internet', undefined)   } else if(body.error){      callback('Please try again', undefined)   } else {      callback(undefined,body.main)         }})}嗨,我是 Node.js 的新手,很難理解回調(diào)、回調(diào)隊列及其處理方式。我的問題是,什么樣的回調(diào)會進(jìn)入 Node 中的回調(diào)隊列?它是否必須是節(jié)點特定 APIS、npm 包和 web API(如 setTimeOut、request())內(nèi)部的回調(diào),才能添加到回調(diào)隊列中,以便在主調(diào)用堆棧為空后執(zhí)行?或任何類型的回調(diào)進(jìn)入 node.js 中的回調(diào)隊列?
查看完整描述

1 回答

?
森林海

TA貢獻(xiàn)2011條經(jīng)驗 獲得超2個贊

node.js 中的任何事件驅(qū)動項最終都有一些代碼在將來的某個時間在事件隊列中插入回調(diào)。這可以是內(nèi)置項目,如setTimeout(),,,通過模塊setInterval()聯(lián)網(wǎng),通過net模塊異步文件 I/Ofs等......或者也可以是使用附加 API 的原生代碼附加組件,觸發(fā)事件和導(dǎo)致回調(diào)被插入到事件隊列中。這是未來某個時間發(fā)生的任何異步事件如何在 node.js 中工作的關(guān)鍵。每個異步操作都使用相同的機(jī)制。

事件循環(huán)實際上相當(dāng)復(fù)雜,包含一堆不同類型的隊列。一個用于 I/O,一個用于定時器,一個用于 Promise。它們有不同的優(yōu)先級和一定的順序。例如,Promise 比其他類型的事件具有更高的優(yōu)先級。定時器實際上與其他定時器的工作方式略有不同,但您仍然可以在邏輯上將它們視為一組定時器,當(dāng)它們被觸發(fā)時,它們會導(dǎo)致回調(diào)被調(diào)用。

除了定時器,當(dāng)一個事件想要被觸發(fā)時,一些本地代碼會在某個地方插入一個回調(diào)到事件隊列的適當(dāng)部分。當(dāng)事件循環(huán)處理該特定類型的事件時,它將調(diào)用與該事件關(guān)聯(lián)的回調(diào)并執(zhí)行與該回調(diào)關(guān)聯(lián)的 Javascript。當(dāng)該回調(diào)返回時,它會繼續(xù)圍繞事件循環(huán)尋找其他事件來運(yùn)行回調(diào)。如果沒有找到任何準(zhǔn)備就緒的東西,它就會休眠,直到有東西被插入到事件隊列中或直到下一個計時器準(zhǔn)備好觸發(fā)。

計時器使用排序鏈表,下一個計時器位于列表的前面。事件循環(huán)只是將當(dāng)前系統(tǒng)時間與列表前面的計時器的觸發(fā)時間進(jìn)行比較。如果當(dāng)事件循環(huán)開始檢查計時器時該事件觸發(fā)的時間(或超過計時器),則執(zhí)行與該計時器關(guān)聯(lián)的回調(diào)并將其從鏈接列表中刪除。如果不是,則事件循環(huán)繼續(xù)處理其他類型的事件。


查看完整回答
反對 回復(fù) 2022-10-21
  • 1 回答
  • 0 關(guān)注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號