async-function-await
语法
1  | async function name([param[, param[, ... param]]]) { statements }  | 
返回值
一个返回的Promise对象会以async function的返回值进行解析(resolved),或者以该函数抛出的异常进行回绝(rejected)。
描述
当调用一个 async 函数时,会返回一个 Promise 对象。
- 当这个 
async函数返回一个值时,Promise的resolve方法会负责传递这个值; - 当 
async函数抛出异常时,Promise的reject方法也会传递这个异常值。 
async 函数中可能会有 await 表达式,这会使 async 函数暂停执行,等待 Promise  的结果出来,然后恢复async函数的执行并返回解析值(resolved或reject)。
注意, await 关键字仅仅在 async function中有效。如果在 async function函数体外使用 await (没有在async中使用),你只会得到一个语法错误(SyntaxError)。
async/await的用途是简化使用promises异步调用的操作,并对一组Promises执行某些操作。
正如Promises类似于结构化回调,async/await类似于组合生成器和promises。
不要将await和Promise.then混淆
示例
通过async方法重写 promise 链
返回 Promise的 API 将会被用于 promise 链,它会将函数分成若干部分。例如下面代码:
1  | function getProcessedData(url) {  | 
可以通过如下所示的一个async函数重写:
1  | async function getProcessedData(url) {  | 
注意,在上述示例中,return 语句中没有 await 操作符,因为 async function的返回值将被隐式地传递给Promise.resolve。
await
await  操作符用于等待一个Promise 对象。它只能在异步函数 async function 中使用。
语法
1  | [return_value] = await expression;  | 
表达式
一个 Promise 对象或者任何要等待的值。
返回值
返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。
描述
await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。
- 若 
Promise正常处理(fulfilled),其回调的resolve函数参数作为await表达式的值,继续执行async function。 - 若 
Promise处理异常(rejected),await表达式会把Promise的异常原因抛出。 
另外,如果 await 操作符后的表达式的值不是一个 Promise,则返回该值本身。 (await不会包装值为Promise)