摘要:一道有意思的題以下我的學(xué)習(xí)分析心路歷程,以及我自己又多加了幾道菜希望對(duì)你有幫助先上菜分析第一道菜第一次看到我做錯(cuò)了,答案是我的疑惑就是為什么在和之間,很奇怪。說明什么呢我對(duì)的內(nèi)部實(shí)現(xiàn)還不了解,那只能去看源碼了。
一道有意思的題
以下我的學(xué)習(xí)分析心路歷程,以及我自己又多加了幾道菜;希望對(duì)你有幫助
先上菜new Promise((resolve, reject) => { console.log("promise1"); resolve(); }).then(() => { console.log("then11"); new Promise((resolve, reject) => { console.log("promise2"); resolve(); }).then(() => { console.log("then21"); }).then(() => { console.log("then23"); }); }).then(() => { console.log("then12"); });分析第一道菜
第一次看到我做錯(cuò)了,答案是
promise1 then11 promise2 then21 then12 then23
我的疑惑就是then12為什么在then21和then23之間,很奇怪。說明什么呢?我對(duì)Promise的內(nèi)部實(shí)現(xiàn)還不了解,那只能去看源碼了。在學(xué)習(xí)過程中,自己也嘗試改變了幾處,也貼上來(lái)吧,大家看看
看完后我的理解先分析下面代碼
new Promise((resolve, reject) => { console.log("promise1"); resolve(); })
第一步console.log("promise1"),這是第一個(gè)promise實(shí)例
第二步resolve(),他是一個(gè)異步,放入異步隊(duì)列中,取名異步1
第三步this.status 狀態(tài)是pending
接著執(zhí)行下面代碼
.then(() => { console.log("then11"); new Promise((resolve, reject) => { console.log("promise2"); resolve(); }).then(() => { console.log("then21"); }).then(() => { console.log("then23"); }); })
因?yàn)闋顟B(tài)是pending,將then方法回調(diào)函數(shù)加入執(zhí)行隊(duì)列(一個(gè)數(shù)組)等待執(zhí)行(專用來(lái)放then方法的數(shù)組),該then方法取名方法1
重點(diǎn)接著執(zhí)行什么?并不是執(zhí)行.then(() => {console.log(then12)}),要記住的是then的參數(shù)方法執(zhí)行時(shí)機(jī)是當(dāng)前(屬于自己的)promise狀態(tài)改變才會(huì)執(zhí)行,誰(shuí)改變resolve或者rejectd的執(zhí)行,那么這里then的promise哪里來(lái),就是上面的方法1中來(lái)看他的return值
所以開始執(zhí)行異步1(我都有取名的,看
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/109604.html
摘要:一篇文章和一道面試題最近,有篇名為張圖幫你一步步看清和的執(zhí)行順序的文章引起了我的關(guān)注。作者用一道年今日頭條的前端面試題為引子,分步講解了最終結(jié)果的執(zhí)行原因。從字面意思理解,讓我們等等。當(dāng)前的最新版本,在這里的執(zhí)行順序上,的確存在有問題。 一篇文章和一道面試題 最近,有篇名為 《8張圖幫你一步步看清 async/await 和 promise 的執(zhí)行順序》 的文章引起了我的關(guān)注。 作者用...
摘要:同步異步回調(diào)傻傻分不清楚。分割線上面主要講了同步和回調(diào)執(zhí)行順序的問題,接著我就舉一個(gè)包含同步異步回調(diào)的例子。同步優(yōu)先回調(diào)內(nèi)部有個(gè),第二個(gè)是一個(gè)回調(diào)回調(diào)墊底。異步也,輪到回調(diào)的孩子們回調(diào),出來(lái)執(zhí)行了。 同步、異步、回調(diào)?傻傻分不清楚。 大家注意了,教大家一道口訣: 同步優(yōu)先、異步靠邊、回調(diào)墊底(讀起來(lái)不順) 用公式表達(dá)就是: 同步 => 異步 => 回調(diào) 這口訣有什么用呢?用來(lái)對(duì)付面試的...
摘要:同步異步回調(diào)傻傻分不清楚。分割線上面主要講了同步和回調(diào)執(zhí)行順序的問題,接著我就舉一個(gè)包含同步異步回調(diào)的例子。同步優(yōu)先回調(diào)內(nèi)部有個(gè),第二個(gè)是一個(gè)回調(diào)回調(diào)墊底。異步也,輪到回調(diào)的孩子們回調(diào),出來(lái)執(zhí)行了。 同步、異步、回調(diào)?傻傻分不清楚。 大家注意了,教大家一道口訣: 同步優(yōu)先、異步靠邊、回調(diào)墊底(讀起來(lái)不順) 用公式表達(dá)就是: 同步 => 異步 => 回調(diào) 這口訣有什么用呢?用來(lái)對(duì)付面試的...
摘要:主線程從任務(wù)隊(duì)列中讀取事件,這個(gè)過程是循環(huán)不斷的,所以整個(gè)的這種運(yùn)行機(jī)制又稱為事件循環(huán)。上面也提到,在到達(dá)指定時(shí)間時(shí),定時(shí)器就會(huì)將相應(yīng)回調(diào)函數(shù)插入任務(wù)隊(duì)列尾部。這就是定時(shí)器功能。關(guān)于定時(shí)器的重要補(bǔ)充定時(shí)器包括與兩個(gè)方法。 一、引子 本文介紹JavaScript運(yùn)行機(jī)制,這一部分比較抽象,我們先從一道面試題入手: console.log(1); setTimeout(function()...
閱讀 2401·2021-10-11 10:59
閱讀 2658·2021-10-11 10:58
閱讀 3367·2021-09-08 09:35
閱讀 3945·2021-09-02 15:21
閱讀 1540·2019-08-30 15:53
閱讀 2683·2019-08-29 14:16
閱讀 2133·2019-08-26 14:00
閱讀 3018·2019-08-26 13:52