ES6學習筆記(20)之 async 函數

參考:ECMAScript 6 入門

使用場景:可以將異步方法以同步的方式執(zhí)行

  • async 函數是什么?一句話跨蟹,它就是 Generator 函數的語法糖橘沥。async函數就是將 Generator 函數的星號(*)替換成async,將yield替換成await痢艺,并在調用 async 函數時按順序執(zhí)行異步方法介陶。可以說 async 函數就是 Generator 函數和自動執(zhí)行器(概念請參照上一篇)的結合哺呜。

  • async函數的返回值是 Promise 對象某残,這比 Generator 函數的返回值是 Iterator 對象方便多了。你可以用then方法指定下一步的操作玻墅。

  • 多個await命令后面的異步操作,如果不存在繼發(fā)關系环础,最好讓它們同時觸發(fā)剩拢。
    錯誤的寫法:

let foo = await getFoo();
let bar = await getBar();

正確的寫法:

// 寫法一
let [foo, bar] = await Promise.all([getFoo(), getBar()]);

// 寫法二
let fooPromise = getFoo();
let barPromise = getBar();
let foo = await fooPromise;
let bar = await barPromise;
  • 如何正確的使用 async 和 await?
    分析以下代碼,看能否按順序執(zhí)行框都,為什么呵晨?
function dbFuc(db) { 
  let docs = [{}, {}, {}];

  docs.forEach(async function (doc) {
    await db.post(doc);
  });
}

正確的寫法應該是什么熬尺?請見文章最后。

  • 新的提案:(了解就行)
    根據語法規(guī)格季二,目前await命令只能出現在 async 函數內部,否則都會報錯胯舷。
    目前,有一個語法提案炊汹,允許在模塊的頂層獨立使用await命令逃顶。這個提案的目的,是借用await解決模塊異步加載的問題(模塊間按順序互相依賴)霸褒。
// x.js
console.log("X1");
await new Promise(r => setTimeout(r, 1000));
console.log("X2");

// y.js
console.log("Y");

// z.js
import "./x.js";
import "./y.js";
console.log("Z");

打印結果是X1盈蛮、Y、X2眉反、Z
頂層的await命令有點像寸五,交出代碼的執(zhí)行權給其他的模塊加載,等異步操作完成后梳杏,再拿回執(zhí)行權,繼續(xù)向下執(zhí)行叛溢。


思考題答案:

async function dbFuc(db) {
  let docs = [{}, {}, {}];

  for (let doc of docs) {
    await db.post(doc);
  }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末劲适,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子烹植,更是在濱河造成了極大的恐慌,老刑警劉巖草雕,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異固以,居然都是意外死亡墩虹,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門旬昭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人稳懒,你說我怎么就攤上這事÷叮” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵或油,是天一觀的道長。 經常有香客問我顶岸,道長叫编,這世上最難降的妖魔是什么辖佣? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任搓逾,我火速辦了婚禮,結果婚禮上霞篡,老公的妹妹穿的比我還像新娘。我一直安慰自己朗兵,他們只是感情好,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布余掖。 她就那樣靜靜地躺著,像睡著了一般盐欺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上找田,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天着憨,我揣著相機與錄音,去河邊找鬼。 笑死漆改,一個胖子當著我的面吹牛,可吹牛的內容都是我干的去扣。 我是一名探鬼主播樊破,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼哲戚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了顺少?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤梅猿,失蹤者是張志新(化名)和其女友劉穎秒裕,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體癞松,經...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡入蛆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年哨毁,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扼褪。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡话浇,死狀恐怖,靈堂內的尸體忽然破棺而出幔崖,到底是詐尸還是另有隱情渣淤,我是刑警寧澤吉嫩,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布自娩,位于F島的核電站,受9級特大地震影響忙迁,放射性物質發(fā)生泄漏。R本人自食惡果不足惜姊扔,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一旱眯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧共虑,春花似錦呀页、人聲如沸妈拌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丸氛。三九已至培愁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缓窜,已是汗流浹背定续。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留禾锤,地道東北人私股。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像恩掷,于是被迫代替她去往敵國和親倡鲸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內容

  • 含義 async函數是Generator函數的語法糖黄娘,它使得異步操作變得更加方便峭状。 寫成async函數克滴,就是下面這...
    oWSQo閱讀 1,991評論 0 2
  • async 函數 含義 ES2017 標準引入了 async 函數宁炫,使得異步操作變得更加方便。 async 函數是...
    huilegezai閱讀 1,259評論 0 6
  • async 函數 ES2017 標準引入了 async 函數氮凝,使得異步操作變得更加方便羔巢。async 函數是什么?一...
    _羊羽_閱讀 2,103評論 0 1
  • 前面的話 ES2017標準引入了async 函數罩阵,使得異步操作變得更加方便竿秆。本文將詳細介紹async函數 概述 a...
    CodeMT閱讀 1,341評論 0 3
  • 含義 ES2017標準引入了async函數,使得異步操作變得更加方便.async函數其實就是Generator函數...
    JarvanZ閱讀 529評論 0 0