什么是 async/await?
async/await 是一种基于 Promise 之上的语法糖,比 Promise 的写法更像是同步操作。
首先,我们会使用 async 关键字将函式标记为异步函式,异步函式就是指返回值为 Promise 物件的函式。
在异步函式中我们可以调用其他的异步函式,不过不是使用 then(),而是使用 await 语法,await 会等待 Promise 完成之后直接返回最终的结果。
async/await的作用就是将异步逻辑,转化为同步的顺序来书写,以下代码
function drive() {
return new Promise((resolve, reject) => {
setTimeout(function() {
resolve('开车去超市')
}, 2000)
})
}
function shop() {
return new Promise((resolve, reject) => {
setTimeout(function() {
resolve('到超市了,开始买东西')
}, 1000)
})
}
(async function(){
console.log(await drive());
console.log(await shop());
console.log('我在await之后触发');
})()
输出结果
Promise
Promise 是在 ES6 出现的新功能,并且是用来优化过去回调函式 callback 的写法,可以避免回调地域
Promise 接受两个函式参数 resolve reject
一个 Promise 一定会处于以下三种状态的其中一种
- pending:初始状态,执行了 executor,但还在等待中。
- fulfilled:表示操作完成,执行 resolve 函式。
- rejected:表示操作失败,执行 reject 函式。
function drive() {
return new Promise((resolve, reject) => {
setTimeout(function() {
resolve('开车去超市')
}, 2000)
})
}
function shop() {
return new Promise((resolve, reject) => {
setTimeout(function() {
resolve('到超市了,开始买东西')
}, 1000)
})
}
(function(){
drive().then((data)=>{
console.log(data);
return shop()
}).then((data)=>{
console.log(data);
})
})()