這里給大家分享我在網(wǎng)上總結(jié)出來的一些知識,希望對大家有所幫助

10年積累的成都網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有涇川免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
1. 異步編程的實現(xiàn)方式?
JavaScript中的異步機(jī)制可以分為以下幾種:
- 回調(diào)函數(shù)的方式,使用回調(diào)函數(shù)的方式有一個缺點是,多個回調(diào)函數(shù)嵌套的時候會造成回調(diào)函數(shù)地獄,上下兩層的回調(diào)函數(shù)間的代碼耦合度太高,不利于代碼的可維護(hù)。
- Promise 的方式,使用 Promise 的方式可以將嵌套的回調(diào)函數(shù)作為鏈?zhǔn)秸{(diào)用。但是使用這種方法,有時會造成多個 then 的鏈?zhǔn)秸{(diào)用,可能會造成代碼的語義不夠明確。
- generator的方式,它可以在函數(shù)的執(zhí)行過程中,將函數(shù)的執(zhí)行權(quán)轉(zhuǎn)移出去,在函數(shù)外部還可以將執(zhí)行權(quán)轉(zhuǎn)移回來。當(dāng)遇到異步函數(shù)執(zhí)行的時候,將函數(shù)執(zhí)行權(quán)轉(zhuǎn)移出去,當(dāng)異步函數(shù)執(zhí)行完畢時再將執(zhí)行權(quán)給轉(zhuǎn)移回來。因此在 generator 內(nèi)部對于異步操作的方式,可以以同步的順序來書寫。使用這種方式需要考慮的問題是何時將函數(shù)的控制權(quán)轉(zhuǎn)移回來,因此需要有一個自動執(zhí)行 generator 的機(jī)制,比如說 co 模塊等方式來實現(xiàn) generator 的自動執(zhí)行。
- async 函數(shù)的方式,async 函數(shù)是 generator 和 promise 實現(xiàn)的一個自動執(zhí)行的語法糖,它內(nèi)部自帶執(zhí)行器,當(dāng)函數(shù)內(nèi)部執(zhí)行到一個 await 語句的時候,如果語句返回一個 promise 對象,那么函數(shù)將會等待 promise 對象的狀態(tài)變?yōu)?resolve 后再繼續(xù)向下執(zhí)行。因此可以將異步邏輯,轉(zhuǎn)化為同步的順序來書寫,并且這個函數(shù)可以自動執(zhí)行。
2. setTimeout、Promise、Async/Await 的區(qū)別
(1)setTimeout
console.log('script start') //1. 打印 script start
setTimeout(function(){
console.log('settimeout') // 4. 打印 settimeout
}) // 2. 調(diào)用 setTimeout 函數(shù),并定義其完成后執(zhí)行的回調(diào)函數(shù)
console.log('script end') //3. 打印 script start
// 輸出順序:script start->script end->settimeout
網(wǎng)頁題目:JavaScript知識總結(jié) 異步編程篇
文章鏈接:
http://weahome.cn/article/dsojpip.html