91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

發布時間:2020-09-23 06:47:54 來源:腳本之家 閱讀:666 作者:zhq2005095 欄目:web開發

關于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中,大體的原理也是類似的。

總結

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

向AI問一下細節

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

AI

三台县| 阿克苏市| 武强县| 绍兴县| 陵川县| 锦州市| 五指山市| 平谷区| 弥渡县| 通化市| 会宁县| 博兴县| 基隆市| 南靖县| 来宾市| 略阳县| 通州区| 黄骅市| 宁海县| 肥西县| 赣州市| 安图县| 张家港市| 定陶县| 双鸭山市| 东乌珠穆沁旗| 砀山县| 阿拉善盟| 高碑店市| 西乡县| 竹山县| 松江区| 定襄县| 绵阳市| 兰西县| 九龙城区| 五家渠市| 谷城县| 金湖县| 峨边| 黑龙江省|