成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JS異步編程有哪些方案?為什么會出現這些方案?

開發 前端
關于 JS 單線程、EventLoop 以及異步 I/O 這些底層的特性,我們之前做過了詳細的拆解,不在贅述。

 [[320125]]

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

回調函數時代

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

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

典型的高階函數,將回調函數作為函數參數傳給了readFile。但久而久之,就會發現,這種傳入回調的方式也存在大坑, 比如下面這樣:

  1. fs.readFile('1.json', (err, data) => { 
  2.     fs.readFile('2.json', (err, data) => { 
  3.         fs.readFile('3.json', (err, data) => { 
  4.             fs.readFile('4.json', (err, data) => { 
  5.  
  6.             }); 
  7.         }); 
  8.     }); 
  9. }); 

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

Promise 時代

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

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

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

co + Generator 方式

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

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

async + await方式

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

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

這四種經典的異步編程方式就簡單回顧完了,由于是鳥瞰大局,我覺得知道是什么比了解細節要重要, 因此也沒有展開。不過沒關系,接下來,讓我們針對這些具體的解決方案,一步步深入異步編程,理解其中的本質。

責任編輯:武曉燕 來源: 前端三元同學
相關推薦

2019-01-17 10:58:52

JS異步編程前端

2011-05-17 08:58:29

軟件項目經理

2020-09-29 15:24:07

面試數據結構Hashmap

2023-09-20 14:54:17

MySQL

2023-05-15 08:34:36

css浮動

2010-04-07 16:33:56

Oracle刪除

2021-06-28 08:10:59

JavaScript異步編程

2016-10-27 21:33:46

ReduxFlux異步方案

2010-07-08 13:13:14

清除SQL Serve

2010-07-20 11:31:25

SQL Server避

2019-09-09 10:09:51

分布式事務 數據庫

2024-01-31 10:11:41

Redis內存

2018-05-13 21:57:04

JavaScript異步編程方案

2010-03-24 10:56:05

Python線程編程

2010-07-22 14:16:59

SQL Server

2022-07-06 08:25:17

服務網格Kubernetes

2024-10-29 09:32:33

VMwareGCPAWS

2022-09-26 00:04:32

Redis故障模式

2025-06-03 04:10:00

2010-06-04 16:12:39

MYSQL_ASSOC
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91免费在线看 | 台湾佬成人网 | 亚洲电影中文字幕 | 精品一区二区三区91 | 毛片一级片 | 日韩精品免费一区二区在线观看 | 一区二区在线观看免费视频 | www.精品国产 | 久久久亚洲精品视频 | 成人免费观看男女羞羞视频 | 国产成人精品免高潮在线观看 | 久久99精品久久久久 | 羞羞免费网站 | 久久综合888 | 人人性人人性碰国产 | 日韩av在线中文字幕 | 亚洲一区二区三区四区五区午夜 | 米奇7777狠狠狠狠视频 | 欧美日本在线观看 | 一区二区三区四区五区在线视频 | 黄色免费av | 久久久久久影院 | 久热精品免费 | 91成人在线视频 | 日本一区二区不卡 | 国产九九精品 | 日韩在线观看视频一区 | 久久久久久免费免费 | 精品国产乱码久久久久久果冻传媒 | 在线免费亚洲视频 | 亚洲乱码一区二区三区在线观看 | 日日操夜夜操天天操 | 国产精品中文字幕在线播放 | 国产免费一区二区三区免费视频 | 久久国产精品一区二区 | 一级看片 | 在线观看国产视频 | 亚洲 中文 欧美 日韩 在线观看 | 九九热精品在线 | 久久99精品国产麻豆婷婷 | 国产午夜av片 |