Promise.all解决多个async/await串行导致的加载缓慢问题

1.问题起源

源于某个线上小程序商城项目改造,项目需求为商城内的广告图及其点击跳转地址需做成可配置功能。
设计思路:将广告图地址与跳转地址数据存于数据库中,通过对应管理后台进行配置。于是为了精确赋值,在源码内便出现多个async/await的串行异步请求,导致负载压力过大时出现加载速度缓慢的问题。

2.解决方案

使用Promise.all()方法将多个async/await封装并发进行,具体如下:

let head_b1,head_b2,head_b3,head_b4;
			Promise.all([
				this.$api.request({
					data_key: 'head_b1'
				}, '/DataImgSys/', 'getValue'),
				this.$api.request({
					data_key: 'head_b2'
				}, '/DataImgSys/', 'getValue'),
				this.$api.request({
					data_key: 'head_b3'
				}, '/DataImgSys/', 'getValue'),
				this.$api.request({
					data_key: 'head_b4'
				}, '/DataImgSys/', 'getValue')
			]).then((result)=>{
				head_b1=result[0].data[0].data_value;
				head_b2=result[1].data[0].data_value;
				head_b3=result[2].data[0].data_value;
				head_b4=result[3].data[0].data_value;
			});	

目前未能找到如直接从封装定义的requese中取对应值的方法,只能先行定义变量后续再做判断或取值。
ps:promise.all需慎用,否则会造成其中一个请求失败而导致程序阻塞的风险,解决方法:封装的async/await中无论success/fail都是用resolve返回data,由返回值进行判断而非使用会导致阻塞的reject

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
async/await是一种异步编程模型,在处理异步操作时非常方便且易于理解。以下是几个使用async/await的常见场景: 1. 异步请求:在进行网络请求或数据库操作时,可以使用async/await来处理异步操作。通过在函数前加上async关键字,可以将原本异步的操作以同步的方式来编写,让代码更易读且逻辑更清晰。 2. 用其他异步函数:当需要用其他异步函数时,使用await关键字可以暂停当前函数的执行,并在异步函数返回结果后继续执行。这样可以避免回地狱,提高代码的可读性和可维护性。 3. 处理Promiseasync/await可以更方便地处理Promise对象,不需要像使用then和catch那样编写复杂的回链。通过await关键字可以直接获取Promise的结果,以同步的方式进行处理。 4. 并发执行异步操作:使用async/await可以实现多个异步操作的并发执行。通过将异步函数封装成Promise对象,可以使用Promise.all来等待所有异步操作完成,然后再进行下一步的操作。 5. 错误处理:使用try/catch语法结合async/await可以更方便地处理异步操作中的错误。在try块中执行异步操作,如果遇到错误,可以在catch块中捕获并进行相应的处理,避免全局的错误中断程序的执行。 总之,async/await提供了一种更简洁、易读且可控的方式来处理异步操作,使得异步编程变得更加舒适和高效。在需要处理异步操作的场景下,特别是在需要串行执行和错误处理的情况下,async/await可以提供更好的编程体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值