JavaScript Day26 - Async、Await

ES7:Async、Await

  • asyncasync 写在函式前面,表示函式是非同步的,回传值是 Promise,所以可以接续使用 then 进行後续处理
  • awaitawait 要写在 async 内部,await 後面接的是一个 Promise,等待 Promise 的状态被 resolved,之後才会继续执行下一段程序,类似 then
  • 想要接 Promise 的 catch 可以使用 try catch

参考 MDN 的例子比较

// 使用 promise 写法
function getProcessedData(url) {
  return downloadData(url) // returns a promise
    .catch(e => {
      return downloadFallbackData(url); // returns a promise
    })
    .then(v => {
      return processDataInWorker(v); // returns a promise
    });
}

// 使用 async await
async function getProcessedData(url) {
  let v;
  try {
    v = await downloadData(url); // 对应 return
  } catch(e) {
    v = await downloadFallbackData(url); // 对应 .catch
  }
  return processDataInWorker(v); // 对应 .then
}

等待处理的例子

function resolveAfterXSeconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
      console.log(`${x} Seconds`);
    }, x*1000);
  });
}


async function add(x) {
  const a = await resolveAfterXSeconds(3); // a 先执行
  const b = await resolveAfterXSeconds(2); // 等 a 执行完
  return x + a + b;
}

add(10).then(v => {
  console.log(v);  // prints 15 
});
// 3 Seconds 等 a 执行完
// 2 Seconds 等 b 执行完
// 15 (5秒後 10 + 3 + 2 = 15)

参考资料

MDN async function
铁人赛:JavaScript Await 与 Async
JavaScript基本功修练:Day26 - Promise的语法糖:async/await
简单理解 JavaScript Async 和 Await
JS 原力觉醒 Day16 - Async / Await:Promise 语法糖
【Day 11】穿越 ES6 迈向 ES7 的 async/await

次回

来说说 IIFE


<<:  [27] 用 python 刷 Leetcode: 455

>>:  JS Library 学习笔记:Three.js 初见面,在2D画面创造三维世界 (一)

day20 在ui蒐集flow,能取代liveData吗?

好的,前一篇讲到了flow可以完全取代liveData,其实错!! 直接从结论开始讲,flow并不支...

【Day 11】Variables 变数

接下来我们要针对基本变数型态做一些简单的介绍,以及超级重要的阵列!那这篇先以variables为主。...

[Android 开发经验三十天]#D30 完赛心得

夜阑人静小可怕 别怕!你有铁人赛,写吧! 心得 tags: 铁人赛 Templates 嗨,大家安...

新手学习JavaScript:day29 - Todolist(2)

嗨!大家好,昨天我们做了新增以及划掉的功能,今天让我们来完成删除跟切换标签,最後让完成的任务进入到完...

[Android 错误处理大全] 解决在 Debug 版进行 Facebook 登入失败

近期在接 Facebook SDK 做第三方登入时发现 只要不是 Release 版的 apk 就无...