1、async:异步的,await:等待。
一、作为async标识的函数与正常函数有两个区别:
1、当我们用async来声明一个函数的时候就说明这个函数是异步函数了,但事实上被声明的函数仍然是会在后面js之前求值,代码如下:
async function test() {
console.log(111);
}
test()
console.log(222);
打印顺序并没将test作为异步处理,结果如下:
111
222
2、JavaScript一般的函数如果不指定返回结果默认返回undefined,async标识的函数返回的是一个fullied期约。代码如下:
async function test() {
return 3
}
console.log(test());
返回的是一个fulfilled期约:
二、await
1、这个关键字主要是针对不会马上完成的任务,所以await必须在async中使用,使用await可以暂停异步代码的执行,等待期约解决。经常使用的案例:
async function test() {
const num = await new Promise((resolve, rejected) => {
const timer = setTimeout(() => {
console.log('过了3秒打印');
resolve()
}, 3000)
})
console.log('同步这个函数里面的代码');
}
console.log(test());
console.log('标识');
结果如下:
2、await期待一个thenable接口的对象,但常规值也是可以的,如果是thenable接口那么这个promise对象可以由await来‘解包’。代码如下:
async function demo() {
console.log(await 1);
}
demo()
3、对于拒绝的promise状态await会报一场,代码如下:
async function demo() {
console.log(await Promise.reject(3));
}
demo()
结果:
三、总结:
在实际开发体验中async和awiat是形影不离的,如果只有async那跟不加效果是一样的,如果仅仅有await那么该方法会报异常。 async和await的核心是:如果是thenable接口那么这个promise对象可以由await来‘解包’。