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

首頁 > 編程 > JavaScript > 正文

JS為什么說async/await是generator的語法糖詳解

2019-11-19 11:11:52
字體:
來源:轉載
供稿:網友

關于async的介紹,在阮一峰的ES6入門教程中說到:

async 函數是什么?一句話,它就是 Generator 函數的語法糖。

可是,為什么這么說呢?

首先,比如說有一個異步操作,使用 async/await 語法來以同步模擬異步操作。

使用 async/await 實現一個 sleep 的功能

function sleep(time) { return new Promise((resolve, reject) => { setTimeout(() => {  resolve(1); }, time); });}async function test () { for(let i = 0; i < 10; i++) { let result = await sleep(1000); console.log(result); }}

將 async/await 轉成 generator 和 promise 來實現:

let test = function () { // ret 為一個Promise對象,因為ES6語法規定 async 函數的返回值必須是一個 promise 對象 let ret = _asyncToGenerator(function* () { for (let i = 0; i < 10; i++) {  let result = yield sleep(1000);  console.log(result); } }); return ret;}();// generator 自執行器function _asyncToGenerator(genFn) { return new Promise((resolve, reject) => { let gen = genFn(); function step(key, arg) {  let info = {};  try {  info = gen[key](arg);  } catch (error) {  reject(error);  return;  }  if (info.done) {  resolve(info.value);  } else {  return Promise.resolve(info.value).then((v) => {   return step('next', v);  }, (error) => {   return step('throw', error);  });  } } step('next'); });}

看完以上代碼,是不是一目了然了啊。將 async/await 使用 generator 進行改寫的關鍵是要使用 promise 來實現一個 generator 自執行器。在babel中,大體的原理也是類似的。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 环江| 天津市| 拜城县| 新绛县| 张北县| 旅游| 乌审旗| 乌兰浩特市| 清丰县| 赫章县| 宁化县| 平凉市| 格尔木市| 神农架林区| 西和县| 南乐县| 汕头市| 礼泉县| 额敏县| 呼和浩特市| 简阳市| 巴楚县| 天柱县| 常德市| 蛟河市| 延寿县| 西城区| 福泉市| 呼和浩特市| 思南县| 商南县| 泌阳县| 扎囊县| 天台县| 阿勒泰市| 辽阳市| 和政县| 灵山县| 芜湖市| 海城市| 韶关市|