异步函数的实例分享

异步函数的实例分享
  异步函数
  
  异步函数(async function)是 ECMAScript 2017 (ECMA-262) 标准的规范,几乎被所有浏览器所支持,除了 Internet Explorer。
  
  在 Promise 中我们编写过一个 Promise 函数:
  
  实例
  
  function print(delay, message) {
  
  return new Promise(function (resolve, reject) {
  
  setTimeout(function () {
  
  console.log(message);
  
  resolve();
  
  }, delay);
  
  });
  
  }
  
  然后用不同的时间间隔输出了三行文本:
  
  实例
  
  print(1000, "First").then(function () {
  
  return print(4000, "Second");
  
  }).then(function () {
  
  print(3000, "Third");
  
  });
  
  我们可以将这段代码变得更好看:
  
  实例
  
  async function asyncFunc() {
  
  await print(1000, "First");
  
  await print(4000, "Second");
  
  await print(3000, "Third");
  
  }
  
  asyncFunc();
  
  哈!这岂不是将异步操作变得像同步操作一样容易了吗!
  
  这次的回答是肯定的,异步函数 async function 中可以使用 await 指令,await 指令后必须跟着一个 Promise,异步函数会在这个 Promise 运行中暂停,直到其运行结束再继续运行。
  
  异步函数实际上原理与 Promise 原生 API 的机制是一模一样的,只不过更便于程序员阅读。
  
  处理异常的机制将用 try-catch 块实现:
  
  实例
  
  async function asyncFunc() {
  
  try {
  
  await new Promise(function (resolve, reject) {
  
  throw "Some error"; // 或者 reject("Some error")
  
  });
  
  } catch (err) {
  
  console.log(err);
  
  // 会输出 Some error
  
  }
  
  }
  
  asyncFunc();
  
  如果 Promise 有一个正常的返回值,await 语句也会返回它:
  
  实例
  
  async function asyncFunc() {
  
  let value = await new Promise(
  
  function (resolve, reject) {
  
  resolve("Return value");
  
  }
  
  );
  
  console.log(value);
  
  }
  
  asyncFunc();
  
  程序会输出:
  
  Return value

推荐阅读