async
async
函数不论有没有什么使用await
,它总是会返回一个promise对象
。所以在执行async函数的时候,有返回值的情况下可以直接.then
和 .catch
方法
- async/await 本质上依然是基于Promise,但在使用上更加简便符合自然习惯。
- async函数
外部的调用异步执行
。 - async函数
内部同步执行
。await之间相当于.then。 - 需要try/catch await应对promise reject的情况。
返回成功
async function fun() {
return 1
}
fun().then((result) => {
console.log(result); // 1
})
返回错误
函数内部抛出的错误,会被then的第二个函数或catch方法捕获到
async function fun() {
throw 'error'
}
fun().then((result) => {
console.log(result);
}).catch((err) => {
console.log(err); // error
});
await
await
操作是等待一个promise
对象的结果,promise
返回resolve
就继续执行,返回reject
就抛出异常,如果不是promise
返回该值本身。在此期间会阻塞,延迟执行await下面的语句。只能在aync
异步函数中使用。
并发
async function(){
//同步阻塞写法
let resultA = await asyncFunA();
let resultB = await asyncFunB();
//异步不阻塞
let asyncA = asyncFunA();//异步非阻塞
let asyncB = asyncFunB();
let resultA = await asyncA; //等到需要的时候再去阻塞
let resultB = await asyncB;
//大量并发
await Promise.all([asyncFunA,asyncFunB]);
//需要拿返回值的话
await Promise.all([asyncFunA,asyncFunB]).then(([resultA ,resultB])=>{});
}