国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

ES6 javascript的異步操作實例詳解

2024-05-06 15:25:01
字體:
來源:轉載
供稿:網友

本文實例講述了ES6 javascript的異步操作。分享給大家供大家參考,具體如下:

異步編程對 JavaScript 語言太重要。 Javascript 語言的執行環境是“ 單線程” 的, 如果沒有異步編程, 根本沒法用, 非卡死不可。

ES6 誕生以前, 異步編程的方法, 大概有下面四種。

① 回調函數
② 事件監聽
③ 發布 / 訂閱
④ Promise 對象

ES6 將 JavaScript 異步編程帶入了一個全新的階段, ES7 的Async函數更是提出了異步編程的終極解決方案。

一、基本概念

1. 異步

所謂 " 異步 ",簡單說就是一個任務分成兩段, 先執行第一段, 然后轉而執行其他任務, 等做好了準備, 再回過頭執行第二段。

比如, 有一個任務是讀取文件進行處理, 任務的第一段是向操作系統發出請求, 要求讀取文件。 然后, 程序執行其他任務, 等到操作系統返回文件,再接著執行任務的第二段( 處理文件)。 這種不連續的執行, 就叫做異步。

相應地, 連續的執行就叫做同步。 由于是連續執行, 不能插入其他任務, 所以操作系統從硬盤讀取文件的這段時間, 程序只能干等著。

2. 回調函數

JavaScript 語言對異步編程的實現, 就是回調函數。 所謂回調函數, 就是把任務的第二段單獨寫在一個函數里面, 等到重新執行這個任務的時候, 就直接調用這個函數。 它的英語名字 callback, 直譯過來就是 " 重新調用 "。

讀取文件進行處理, 是這樣寫的。

fs.readFile('/etc/passwd', function(err, data) {  if(err) throw err;  console.log(data);});

上面代碼中, readFile 函數的第二個參數, 就是回調函數, 也就是任務的第二段。 等到操作系統返回了 / etc / passwd這個文件以后, 回調函數才會執行。

一個有趣的問題是, 為什么 Node.js 約定, 回調函數的第一個參數, 必須是錯誤對象 err( 如果沒有錯誤, 該參數就是 null)? 原因是執行分成兩段, 在這兩段之間拋出的錯誤, 程序無法捕捉, 只能當作參數, 傳入第二段。

3. Promise

回調函數本身并沒有問題, 它的問題出現在多個回調函數嵌套。 假定讀取 A 文件之后, 再讀取 B 文件, 代碼如下。

fs.readFile(fileA, function(err, data) {  fs.readFile(fileB, function(err, data) {    // ...  });});

不難想象, 如果依次讀取多個文件, 就會出現多重嵌套。 代碼不是縱向發展, 而是橫向發展, 很快就會亂成一團, 無法管理。 這種情況就稱為 " 回調函數噩夢 " ( callback hell )。

Promise 就是為了解決這個問題而提出的。 它不是新的語法功能, 而是一種新的寫法, 允許將回調函數的嵌套, 改成鏈式調用。 采用 Promise, 連續讀取多個文件, 寫法如下。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 腾冲县| 济阳县| 万盛区| 瑞昌市| 濉溪县| 莆田市| 通渭县| 微博| 商洛市| 岳普湖县| 金阳县| 林西县| 德保县| 琼结县| 礼泉县| 延川县| 互助| 高碑店市| 邳州市| 金平| 万宁市| 凌海市| 柏乡县| 班玛县| 大田县| 兴文县| 沧州市| 永平县| 宁晋县| 克山县| 正阳县| 纳雍县| 绵阳市| 康乐县| 海南省| 秦安县| 黄石市| 万盛区| 剑川县| 乌恰县| 洛浦县|