异步函数,也称为“async/await”(语法关键字),是 ES6 Promise 模式在 ECMAScript 函数中的利用。
async/await 是 ES8 标准新增的。这个个性从行为和语法上都加强了 JavaScript,让以同步形式写的代码可能异步执行。

上面来看一个最简略的例子,这个 Promise 在超时之后会解决为一个值:

let p = new Promise((resolve, reject) => setTimeout(resolve, 1000, 3));

这个 Promise 在 1000 毫秒之后解决为数值 3。如果程序中的其余代码要在这个值可用时拜访它,则须要写一个解决处理程序:

let p = new Promise((resolve, reject) => setTimeout(resolve, 1000, 3));p.then((x) => console.log(x)); // 3

这其实是很不不便的,因为其余代码都必须放到 Promise 处理程序中。不过能够把处理程序定义为一个函数:

function handler(x) { console.log(x); }let p = new Promise((resolve, reject) => setTimeout(resolve, 1000, 3));p.then(handler); // 3

这个改良其实也不大。这是因为任何须要拜访这个 Promise 所产生值的代码,都须要以处理程序的模式来接管这个值。也就是说,代码照样还是要放到处理程序里。

ES8 为此提供了 async/await 关键字