【前端异步问题】通过Promise.all()解决异步取值问题

场景

有一个对象数组itemList,数组中的对象有的有属性attr,有的没有。没有属性a的对象需要通过调用接口获取并赋值给相应对象。
再将处理完后的对象数组,传入另一个接口中。

let itemList = [
	{ id: 0, attr: '雨伞'},
	{ id: 1, attr: null},
	{ id: 2, attr: '水杯'},
	{ id: 3, attr: null},
	{ id: 3, attr: '书包'}
]

代码

刚开始我的写法如下:

itemList.forEach(item => {
	if(!item.attr) {
	app.$http.get('url1',id).then(res => {
		item.attr = res.data.attr
		})
	}
})
console.log(itemList) // 此处能打印出我处理好的数组
app.$http.post('url2',{data:itemList})

这种情况下,接口会报错,说我传入的数据没有attr属性。是因为异步导致第一个接口可能没有处理完就调用了第二个接口。这个时候我们可以运用promise.all等遍历过程中所有的promise处理结束后再调用第二个接口,具体代码如下:

let promiseList = [] // 定义数组接收所有的promise
itemList.forEach(item => {
	if(!item?.attr){
	let itemPromise = app.$http.get('url1',id).then(res=>{
	item.attr = res.data.attr
	})
	promiseList.push(itemPromise)
	}
})
Promise.all(promiseList).then(()=>{
	app.$http.post('url2',{data:itemList}).then(res => {
	if(res.code===200){
	$message.success('success')
	}
 })
})

相关推荐

  1. 解决小程序的异步请求问题

    2024-07-17 20:20:05       25 阅读
  2. XML 解析异常问题解决

    2024-07-17 20:20:05       28 阅读
  3. 【级联下拉选项请求异步问题解决

    2024-07-17 20:20:05       55 阅读
  4. Fastadmin解决异步高并发大并发阻塞超时问题

    2024-07-17 20:20:05       36 阅读
  5. C# 异步问答

    2024-07-17 20:20:05       29 阅读
  6. SPI异步传输使用DMA 问题

    2024-07-17 20:20:05       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 20:20:05       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 20:20:05       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 20:20:05       62 阅读
  4. Python语言-面向对象

    2024-07-17 20:20:05       72 阅读

热门阅读

  1. 前端面试题日常练-day94 【Less】

    2024-07-17 20:20:05       25 阅读
  2. Linux第一章课后作业

    2024-07-17 20:20:05       25 阅读
  3. 免费服务器和付费服务器哪个更好?

    2024-07-17 20:20:05       24 阅读
  4. 云服务器,nginx访问失败,安全组,0.0.0.0/0

    2024-07-17 20:20:05       24 阅读
  5. 网络安全工作者如何解决网络拥堵

    2024-07-17 20:20:05       23 阅读
  6. docker network(docker网络)介绍

    2024-07-17 20:20:05       23 阅读
  7. 【C语言】条件运算符详解 - 《 A ? B : C 》

    2024-07-17 20:20:05       26 阅读