vue await async 一个列表循环获取详情

需求:    获取列表的同时获取每个列表的详情

1,获取到一个商品列表

2,但是商品列表里面没有商品详情信息

3,根据商品列表里的商品id循环列表,获取对应的列表内商品的详情

 

问题:    循环获取详情的时候出现异步,导致没有及时的获取商品详情信息

 解决方法:  async  await  异步变同步,

具体:    

 1 1>获取详情的方法
 2 const getOrderInfoFn = (id) => {
 3         
 4         let p = new Promise((resolve,reject)=>{
 5             $http.get('请求的接口'+id,{},).then(res=>{
 6                     let datas = res.data.data
 7                     resolve(datas)
 8                 })
 9         })
10         return p
11     }
12 
13 // 详情使用promise 返回请求到的值
14 
15 2>获取列表的方法
16 const getOrderListFn = async () => {
17         
18         let params = {
19                 page:state.page,
20                 limit:state.curPageLen,
21             }
22         await $http.get('请求的接口',params).then(async res=>{
23                 
24                 let curPageData = res.data.data.rows
25                 state.totalSize = res.data.data.total;
26                 
27                                 //异步转同步,调用同步数据合并方法(在下面)
28                 curPageData = await fdata(curPageData)                
29                 
30                 if(state.page ==1 ){
31                     state.curPageData = []
32                 }
33                 state.curPageData =[...state.curPageData,...curPageData]
34                 state.page += 1
35             }).catch(err=>{
36                 console.log(err)
37                 
38             })
39     }
40 
41 
42 
43 
44 
45 3>同步数据合并方法
46     const fdata = async (data) =>{
47 
48     //map 出一个循环的promise数组,使用promise.all在继续后面
49         const promises = data.map(async item => {
50             const listItem = await getOrderInfoFn(item.id).then(infos=>infos)
51             // const listItem = await {goods:[{goods_name:'ceshi'}]}
52             return listItem;
53         });
54 
55      // 使用promise.all 拿到所有的商品详情
56         const listItems = await Promise.all(promises)
57      // 将商品详情合并入商品的列表信息(promise.all  返回的信息是按照列表的顺序来的,所以可以使用下标进行匹配)
58     const nres = data.map((item,index)=>({
59             ...item,
60             ...listItems[index]
61         }))
62         return nres
63     }
64 
65 
66                     

 

posted @ 2022-09-09 17:32  伊人兮明眸秋水  阅读(179)  评论(0编辑  收藏  举报