網(wǎng)站首頁 編程語言 正文
重點:
1、首先要清楚常見的宏任務(wù)和微任務(wù)有哪些
宏任務(wù):setTimeout、setInterval、ajax;
微任務(wù):promise、async/await
2、其次要清楚的是??微任務(wù) 執(zhí)行時機(jī)比?宏任務(wù)??早
1、微任務(wù)和宏任務(wù)的執(zhí)行規(guī)則
?此處需要注意的是,當(dāng)所有微任務(wù)執(zhí)行完畢后才會取出一個宏任務(wù)執(zhí)行,宏任務(wù)中存在微任務(wù)的話還是需要將所有微任務(wù)執(zhí)行完在取出一個宏任務(wù)繼續(xù)執(zhí)行。
2、JS運(yùn)行機(jī)制
此處不做過多介紹,主要注意以下幾點:
- js是單線程,所謂單線程就是指JS在引擎中只負(fù)責(zé)解釋和執(zhí)行JS代碼的線程只有一個。這點事核心,將來也不會改變。
- 同步任務(wù)會在調(diào)用棧中按照順序等待主線程一次執(zhí)行;異步任務(wù)會在異步任務(wù)有了結(jié)果后,將注冊的回調(diào)函數(shù)放在任務(wù)隊列中,等待主線程空閑的時候,被讀取到棧內(nèi)等待主線程的執(zhí)行
- Promise本身事同步的立即執(zhí)行函數(shù),他的.then()和catch()方法是異步的(微任務(wù))
- async/await是建立在Promise機(jī)制上,當(dāng)調(diào)用一個async函數(shù)時,會返回一個promise對象,而await操作符后面的表達(dá)式就是這個promise,返回值實際上就是peomise的回調(diào)函數(shù)resolve的參數(shù)。
- async方法執(zhí)行時,遇到await會立即執(zhí)行表達(dá)式,async表達(dá)式定義的函數(shù)是立即執(zhí)行的,await表達(dá)式后面的代碼放在微任務(wù)執(zhí)行,包括賦值。
以下舉幾個例子
async function test1() {
console.log("test1 begin");
const result = await test2();
console.log("result", result);
console.log("test1 end");
}
async function test2() {
console.log("test2");
}
console.log("script begin");
test1();
console.log("script end");
控制臺打?。?/p>
?前面注意事項5中說了,async方法執(zhí)行時,遇到await會立即執(zhí)行表達(dá)式,所有第三次輸出應(yīng)該是test2。await后面的代碼將放在微任務(wù)中排隊。
結(jié)果: 1 4 7 5 2 3 6
原文鏈接:https://blog.csdn.net/weixin_46545002/article/details/126285202
相關(guān)推薦
- 2022-05-08 利用Pandas讀取某列某行數(shù)據(jù)之loc和iloc用法總結(jié)_python
- 2022-07-25 Python?APScheduler?定時任務(wù)詳解_python
- 2022-05-13 Missing essential plugin: org.jetbrains.androidPle
- 2023-03-22 C++類中const修飾的成員函數(shù)及日期類小練習(xí)_C 語言
- 2022-10-21 Go語言使用goroutine及通道實現(xiàn)并發(fā)詳解_Golang
- 2022-10-05 C語言二叉樹的概念結(jié)構(gòu)詳解_C 語言
- 2023-01-07 詳解C++11中綁定器bind的原理與使用_C 語言
- 2022-05-05 Flutter如何保證數(shù)據(jù)操作原子性詳解_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支