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
忍一时,越想越气;
退一步,哎呦我去!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通