ES7 引入了 async/await,这是 JavaScript 异步编程的一个比较大的改进。我们可以像写同步代码一些编写异步代码,避免了回调地狱,同时也代码也比 Promise 更易于阅读。
async 和 await 也是面试经常被问到的东西,之前一直只限于会用,并不太理解内部的实现原理。今天就来好好探究探究,JavaScript 中的 async 和 await 到底是怎么工作的。
async
async 就是异步的意思,在函数的定义前加上 async 关键字,表示这是一个异步函数,意味着该函数的执行不会阻塞后面代码的执行。
先来看一个简单的例子:
async function hello() {
console.log('hello');
}
hello();
console.log('world');
可以猜猜这段代码的输出顺序是什么?
输出的顺序如下:
hello
world
你可能要跳出来骂我了,前面不是说不会阻塞后面代码的执行么,为什么还是按顺序输出的?
先别急着骂,容我再进一步解释。
我们先一起来看看 hello 函数的返回值是什么。
async function hello() {
console.log('hello');
return 'hello';
}
console.log(hello());
console.log('world');
上面的代码输出如下:
hello
Promise {
<resolve