ES8中异步的终极解决方案-async await
程序员文章站
2022-05-20 19:45:33
...
1. 什么是async
ES7 中的 async / await 让多个异步 promise 协同工作起来更容易。如果要按一定顺序从多个数据库或者 API 异步获取数据,你可能会以一堆乱七八糟的 promise 和回调函数而告终。而 async / await 结构让我们能用可读性强、易维护的代码更加简洁地实现这些逻辑
async顾名思义是“异步”的意思,async用于声明一个函数是异步的。而await从字面意思上是“等待”的意思,就是用于等待异步完成。并且await只能在async函数中使用
2. 为什么要使用async
通常async、await都是跟随Promise一起使用的。async返回的都是一个Promise对象同时async适用于任何类型的函数上。这样await得到的就是一个Promise对象(如果不是Promise对象的话那async返回的是什么 就是什么;
await得到Promise对象之后就等待Promise接下来的resolve或者reject
3. 怎么使用async
案例1 :
async function testAsync() {
const response = await new Promise((resolve, reject) => {
setTimeout(resolve("this is async"),2000);
});
console.log(response);
};
testAsync();
async、await串行并行处理
串行:等待前面一个await执行后接着执行下一个await,以此类推
async function fun1() {
return new Promise((resolve, reject) => {
setTimeout(resolve,3000);
});
};
async function test(){
console.log('开始执行', new Date().toString());
await fun1();
console.log('结束执行', new Date().toString());
}
并行:将多个promise直接发起请求(先执行async所在函数),然后再进行await操作。
async function asyncAwait(str) {
return await new Promise((resolve) => {
setTimeout(resolve(str), 1000);
})
}
const parallel = async () => { //并行执行
console.time('parallel')
const parallel1 = asyncAwait('async1');
const parallel2 = asyncAwait('async2')
//直接打印
console.log(await parallel1)
console.log(await parallel2)
console.timeEnd('parallel');
};
parallel();
4. 请求失败的处理方式
使用异步请求肯定会有请求失败的情况,async返回的是一个Promise对象。既然是返回一个Promise对象的话那处理当异步请求发生错误的时候我们就要处理reject的状态了,为了保持代码的健壮性使用async、await的时候我们使用try catch来处理错误。
async function catchError() {
try {
const asyncError = await new Promise((resolve, reject) => {
setTimeout(reject('处理异步请求失败'),2000);
});
} catch (error) {
console.log(error);
}
};
catchError();
上一篇: 关于对象深层级的拷贝
下一篇: 【ES6】入门学习
推荐阅读
-
async/await与promise(nodejs中的异步操作问题)
-
JS中async/await实现异步调用的方法
-
小程序开发中如何使用async-await并封装公共异步请求的方法
-
JS中async/await实现异步调用的方法
-
详解node Async/Await 更好的异步编程解决方案
-
三分钟学会用ES7中的Async/Await进行异步编程
-
js中promise方案、async和await方案和传统方案来处理异步回调的问题
-
【ES8】异步代码终极解决方案 async 和 await
-
ASP.Net中的async+await异步编程的实现
-
SpringCloud中基于Feign的异步回调解决方案(SpringBoot+Async+Future实现)