async 和 await 是 Promise的语法糖
- async是对函数的一个修饰:使一个函数返回Promise实例
- await是等待一个Promise实例成功后执行
- 函数中想要使用await,需要把方法基于async修饰才可以
- await只有当前实例状态为成功,才会去执行其后面的代码(代码为失败,后面的代码则不会执行)
async function func(){
return 10
}
console.log(func());
// 控制台的返回结果 在下面
Promise {<resolved>: 10}
__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: 10
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("ok")
reject("no")
}, 1000)
})
async function func1() {
// 函数中想要使用await,需要把方法基于async修饰才可以
// await只有当前实例状态为成功,才会去执行其后面的代码(代码为失败,后面的代码则不会执行)
let result = await p1
console.log(result);
}
func1()
面试题:编写一个sleep函数,让其等待1000MS后执行其他的事情
function sleep(interval = 1000) {
return new Promise(resolve => {
setTimeout(resolve, interval);
})
}
// sleep(2000).then(() => {
// console.log("222");
// })
(async function(){
await sleep()
console.log("11");
await sleep()
console.log("22");
})()
// 下面这种方式会导致回调地狱
function sleep(interval = 2000, callback) {
if (typeof interval === "function") {
callback = interval
interval = 2000
}
setTimeout(() => {
callback()
}, interval)
}
sleep(function () {
console.log("111");
})