亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS異步編程有哪些方案

發布時間:2021-08-25 16:45:29 來源:億速云 閱讀:125 作者:chen 欄目:web開發

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

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

回調函數時代

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

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

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

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

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

Promise 時代

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

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

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

co + Generator 方式

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

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 中新增的關鍵字,凡是加上 async 的函數都默認返回一個 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') }

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

感謝各位的閱讀,以上就是“JS異步編程有哪些方案”的內容了,經過本文的學習后,相信大家對JS異步編程有哪些方案這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

古浪县| 始兴县| 即墨市| 临汾市| 宜黄县| 大悟县| 盘山县| 延边| 南部县| 萨迦县| 平凉市| 安阳县| 汪清县| 金川县| 舞阳县| 林芝县| 宁海县| 邛崃市| 新源县| 阿拉善右旗| 阿拉尔市| 阜新市| 固原市| 和硕县| 织金县| 高唐县| 长海县| 乌兰浩特市| 宿迁市| 温宿县| 崇仁县| 南投市| 高邮市| 喀什市| 大宁县| 桂林市| 岢岚县| 芦溪县| 梧州市| 马公市| 房产|