js非同步之間執行的順序

2022-08-24 04:12:09 字數 678 閱讀 4678

今天同事問了乙個問題,怎麼讓ajax中的**(保持非同步)先執行,再讓普通的function執行。。。

整了個解決辦法:

如下:

將同步**放入settimeout中,變成非同步,則和ajax中的**同為非同步,則按照非同步的方式來排列執行順序。

由此引入非同步之間的執行順序問題!

首先常見的非同步一般有:ajax可以非同步也可同步、**、settimeout系列、事件繫結。  而es6中的新增的promise、async/await。

按照js的執行順序,先執行同步,再執行非同步。那麼上面這些非同步的執行之內該如何執行呢?

首先了解一下巨集任務和微任務。

在js執行機制中,除了同步任務和非同步任務,還有巨集任務和微任務。

在js執行的時候,會先執行同步,非同步被放入非同步佇列中,而不同的非同步任務會被放入不同的非同步佇列中。

每次js執行,先從整體scripts也就是乙個巨集任務進入,執行完裡面所有的微任務以後(也就是同步任務被執行完),再去非同步的任務佇列中,找到下乙個巨集任務,執行裡面的所有微任務,如果沒有巨集任務了,則執行任務佇列中的所有微任務。

所以非同步的執行順序是按照誰是巨集任務,誰是微任務來執行的。

則定時器是非同步中的老大,先執行。而iife是老大中的老大,更先執行,因為它設計的原理是要隔離作用域,不需要等待任何非同步即可執行。

哈哈

js多個非同步請求,按順序執行next

在js裡面,偶爾會遇見需要多個非同步按照順序執行請求,又不想多層巢狀,這裡和promise.all的區別在於,promise或者jquery裡面的 when 是同時傳送多個請求,一起返回,發出去的順序是一起 這裡是按照順序發請求 方法 一 首先建立乙個迭代器,接收任意多個函式引數 function ...

JS執行順序

一 語法分析 瀏覽器將所有js檢查一遍,看有沒有語法錯誤,這裡並不會執行,沒有錯誤則進行第二步,預編譯 二 預編譯 首先要理解函式宣告整體提公升,變數 宣告提公升。這裡要注意變數的提公升,一般我們宣告乙個變數都是 var a 1 console.log a 1 但實際上拆分成了兩步,真正執行是這樣的...

js執行順序

執行緒 cpu 排程的最小單位 程序 cpu 資源分配的最小單位 js是單執行緒的,在同一時間,只能做一件事。但是js有同步任務和非同步任務。同步 有a,b兩段 執行完a後執行b 非同步 有a,b兩段 a和b同時執行 在非同步任務中還有微任務和巨集任務 微任務 promise,process.nex...