网站首页 > 博客文章 正文
async函数其实它就是 Generator 函数的语法糖,至于它跟Generator 有什么区别、优势在哪里、基本用法、语义等直接去看文档会更加容易理解。这篇文章主要讲的是,如果首页中发生多个请求我们怎么使用async函数处理
如果我们需要有一下请求接口列表
[
"getRequest/getItem/1",
"getRequest/getItem/2",
"getRequest/getItem/3",
"getRequest/getItem/4",
"getRequest/getItem/5",
"getRequest/getItem/6",
]
串行
await axios.get("getRequest/getItem/1")
await axios.get("getRequest/getItem/2")
然后我们再来看一下并行。针对上面串行的例子,我们换一种写法便可以实现并行。
const res1 = axios.get("getRequest/getItem/1")
const res2 = axios.get("getRequest/getItem/2")
const r1 = await res1;
const r2 = await res2;
现在看起来似乎实现了我们想要的简单并行发送请求,但是这里需要注意的点是,如果请求有错误的时候的处理。
await axios.get("getRequest/getItem/1") // 出错了
await axios.get("getRequest/getItem/2") // 不执行
await axios.get("getRequest/getItem/3") // 不执行
await axios.get("getRequest/getItem/4") // 不执行
await axios.get("getRequest/getItem/5") // 不执行
await axios.get("getRequest/getItem/6") // 不执行
那么需要用trycatch包裹处理异常
try
{
await axios.get("getRequest/getItem/1") // 出错了
await axios.get("getRequest/getItem/2") // 执行
await axios.get("getRequest/getItem/3") // 执行
await axios.get("getRequest/getItem/4") // 执行
await axios.get("getRequest/getItem/5") // 执行
await axios.get("getRequest/getItem/6") // 执行
}
catch (err)
{
console.log(err)
}
使用async函数实现多个请求并发
思考上面的6个请求都是异步请求相互不依赖的,但是上面这样写就继发请求了要等上一个await请求结束才开始下一个请求,这样比较耗时。
解决方案
通过Promise.all实现并发请求,它们同时触发缩短程序的执行时间。
代码如下(示例):
注意:await必须放在async函数里面
const p1 = axios.get("getRequest/getItem/1")
const p2 = axios.get("getRequest/getItem/2")
const p3 = axios.get("getRequest/getItem/3")
const p4 = axios.get("getRequest/getItem/4")
const p5 = axios.get("getRequest/getItem/5")
const p6 = axios.get("getRequest/getItem/6")
// 写法一
let [cache1, cache2, cache2, cache3, cache4, cache5, cache6] =
await Promise.all(p1, p2, p3, p4, p5, p6)
// 写法二
const r1 = await p1
const r2 = await p2
const r3 = await p3
const r4 = await p4
const r5 = await p5
const r6 = await p6
猜你喜欢
- 2024-10-20 轻量级的React数据流及状态管理解决方案,支持SSR服务器端渲染
- 2024-10-20 5 分钟掌握 JavaScript 实用窍门(javascript官网)
- 2024-10-20 前端必备的20种基本React工具「干货」
- 2024-10-20 8 张图帮你一步步看清 async,await 和 promise 的执行顺序
- 2024-10-20 Atom源码阅读系列一(nasm源码阅读笔记)
- 2024-10-20 2019年JavaScript几个秘密窍门,你知道吗?
- 2024-10-20 小猿圈分享6个提JavaScript 小技巧(下)
- 2024-10-20 js遍历那些事儿(js遍历tr)
- 2024-10-20 Google 开源 zx,用 async/await 编写 shell 脚本
- 2024-10-20 深入理解 ES6 模块机制(es6模块和commonjs)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)