上篇 循环机制(event loop)之宏任务和微任务
async/await :
-
async 函数执行后返回一个Promise对象
-
await只能写在async函数中(async和await必须要一起使用)
-
await 只能处理promise对象的异步等待,在其他的异步方法时候无效,
-
async 函数中使用return返回的内容可以通过then来获取
-
从本质上讲,await函数仍然是promise
为什么要用await
为了使我们的异步代码,更像同步的代码
一 基本使用
**用法:**首先在 function 前面加 async 用来说明这个函数是一个异步函数,然后在async里面写await
await 等待当前async function语句内部语句的执行 await接受promise返回的成功或者失败的内容,若没有返回值则不继续向下执行
- 如果asycn里的代码都是同步的,那么这个函数被调用就会同步执行
async function fn(){
console.log('a')
}
fn()
console.log('b')
//a
//b
-
在await后面接的这个promsie都是同步的,await还是会等待,而Promise没有返回值(成功或者失败),所以await不会继续向下执行
好好看下面这题呀!!!
function fn(){ return new Promise(resolve=>{ console.log(1) }) } async function f1(){ await fn();//没有返回结果所以不向下执行 console.log(2) } f1() console.log(3) //1 //3
-
fn属于同步的有返回结果,返回失败的结果所以向下继续执行
function fn() {
return new Promise((resolve, rej) => {
console.log(1)
rej()
}).then(function (a) {
console.log(5)
}, function (a) {
console.log(4)
})
}
async function f1() {
await fn(); //同步堵塞 执行完之后再向下执行
console.log(2)
}
f1()
console.log(3);
//1
//3
//4
//2
- sum变量是等着b()这个函数执行完毕才有值的 ,其实await和promise中的 .then()差不多
async function a(y){
let sum = await b(3,4)
let c= sum+y;
console.log(c)
}
function b (x,y){
return x+y;
}
a(10)
使用promises
,异步函数有两个可能的返回值:已解析的值和被拒绝的值。我们可以.then()
用于正常情况,.catch()
用于特殊情况。
- 利用try…catch,进行错误处理
async function a(y){
try{
let a = await b(3,4)
let c= a+y;
console.log(c)
}catch(err){
console.log(err);
}
}
function b (x,y){
return x+y;
}
a(10,)