JS異步編程有哪些方案

這篇文章主要講解了“JS異步編程有哪些方案”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“JS異步編程有哪些方案”吧!

創(chuàng)新互聯(lián)公司服務(wù)項目包括大安市網(wǎng)站建設(shè)、大安市網(wǎng)站制作、大安市網(wǎng)頁制作以及大安市網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,大安市網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到大安市省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

關(guān)于 JS 單線程、EventLoop 以及異步 I/O  這些底層的特性,我們之前做過了詳細的拆解,不在贅述。在探究了底層機制之后,我們還需要對代碼的組織方式有所理解,這是離我們最日常開發(fā)最接近的部分,異步代碼的組織方式直接決定了開發(fā)和維護的效率,其重要性也不可小覷。盡管底層機制沒變,但異步代碼的組織方式卻隨著  ES 標準的發(fā)展,一步步發(fā)生了巨大的變革。接著讓我們來一探究竟吧!

回調(diào)函數(shù)時代

相信很多 nodejs 的初學(xué)者都或多或少踩過這樣的坑,node 中很多原生的 api 就是諸如這樣的:

fs.readFile('xxx', (err, data) => {  });

典型的高階函數(shù),將回調(diào)函數(shù)作為函數(shù)參數(shù)傳給了readFile。但久而久之,就會發(fā)現(xiàn),這種傳入回調(diào)的方式也存在大坑, 比如下面這樣:

fs.readFile('1.json', (err, data) => {     fs.readFile('2.json', (err, data) => {         fs.readFile('3.json', (err, data) => {             fs.readFile('4.json', (err, data) => {              });         });     }); });

回調(diào)當中嵌套回調(diào),也稱回調(diào)地獄。這種代碼的可讀性和可維護性都是非常差的,因為嵌套的層級太多。而且還有一個嚴重的問題,就是每次任務(wù)可能會失敗,需要在回調(diào)里面對每個任務(wù)的失敗情況進行處理,增加了代碼的混亂程度。

Promise 時代

ES6 中新增的 Promise 就很好了解決了回調(diào)地獄的問題,同時了合并了錯誤處理。寫出來的代碼類似于下面這樣:

readFilePromise('1.json').then(data => {     return readFilePromise('2.json') }).then(data => {     return readFilePromise('3.json') }).then(data => {     return readFilePromise('4.json') });

以鏈式調(diào)用的方式避免了大量的嵌套,也符合人的線性思維方式,大大方便了異步編程。

co + Generator 方式

利用協(xié)程完成 Generator 函數(shù),用 co 庫讓代碼依次執(zhí)行完,同時以同步的方式書寫,也讓異步操作按順序執(zhí)行。

co(function* () {   const r1 = yield readFilePromise('1.json');   const r2 = yield readFilePromise('2.json');   const r3 = yield readFilePromise('3.json');   const r4 = yield readFilePromise('4.json'); })

async + await方式

這是 ES7 中新增的關(guān)鍵字,凡是加上 async 的函數(shù)都默認返回一個 Promise 對象,而更重要的是 async + await  也能讓異步代碼以同步的方式來書寫,而不需要借助第三方庫的支持。

const readFileAsync = async function () {   const f1 = await readFilePromise('1.json')   const f2 = await readFilePromise('2.json')   const f3 = await readFilePromise('3.json')   const f4 = await readFilePromise('4.json') }

這四種經(jīng)典的異步編程方式就簡單回顧完了,由于是鳥瞰大局,我覺得知道是什么比了解細節(jié)要重要,  因此也沒有展開。

感謝各位的閱讀,以上就是“JS異步編程有哪些方案”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對JS異步編程有哪些方案這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

網(wǎng)站名稱:JS異步編程有哪些方案
鏈接URL:http://bm7419.com/article36/jjdhsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站維護、面包屑導(dǎo)航、標簽優(yōu)化營銷型網(wǎng)站建設(shè)、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)