函数前面的关键字async 有两个作用:

    1. 让这个函数总是返回一个 promise。
    2. 允许在该函数内使用 await。

    Promise 前的关键字 await 使 JavaScript 引擎等待该 promise settle,然后:

    1. 如果有 error,就会抛出异常 — 就像那里调用了 throw error 一样。
    2. 否则,就返回结果。 ```javascript async function f() {

      let promise = new Promise((resolve, reject) => { setTimeout(() => resolve(“done!”), 1000) });

      let result = await promise; // 等待,直到 promise resolve (*)

      alert(result); // “done!” }

    f();

    1. Error处理<br />我们可以用 `try..catch` 来捕获error
    2. ```javascript
    3. async function f() {
    4. try {
    5. let response = await fetch('http://no-such-url');
    6. } catch(err) {
    7. alert(err); // TypeError: failed to fetch
    8. }
    9. }
    10. f();

    有了 async/await 之后,我们就几乎不需要使用 promise.then/catch,但是不要忘了它们是基于 promise 的,因为有些时候(例如在最外层作用域)我们不得不使用这些方法。并且,当我们需要同时等待需要任务时,Promise.all 是很好用的。