js按顺序循环接口返回数据,组合成新数据

有时候我们需要根据一个参数,通过接口返回的数据进行一一对应。形成请求参数又有对应的返回结果的新数据。

新数据格式1:一个对象包含请求参数和返回值

现在vue项目里有个字典接口,该页面很多地方要调用字典接口,需要写个循环将字典值和接口返回数据对应。

先声明一个dictlist空数据

调用字典接口,回调字典列表

initDict(dict){
        return new Promise((resolve, reject) => {
          initDictOptions(dict).then(res => {
            let result= res.result
            resolve(result)
          })
        })
    }, 

循环要遍历的数组,调用上面方法,将数据填充到dictlist。

Promise .all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

initDictConfig() {
      let list = this.dictOptions.map(async (item, index) => {
        item.dictlist=await this.initDict(item.dictName)
        return item
      })
      Promise.all(list).then((value,i) => {
       
        console.log(value)
      })
      
},

 最终打印数据的内容

新数据格式2:键值对形式

更换一个新需求,键值对 键(字段名)值(字典对应的数据)

1.data上声明好字典名

dictCode:{
        QPMS_PROBLEM_STATUS:[],
        QPMS_PROBLEM_SHIFT:[],
        QPMS_PROBLEM_MATERIALTYPE:[],
}

2. 可以使用mixins这个只需要todo页面声明好需要的字段,即可立即生成对应的字典数据,这样就可以在页面当中使用了。

import { dictMixin } from '@/mixins/dictMixin'

 mixins: [dictMixin],

vue项目可以写一个mixins 这样每个页面都能调用

 
import {initDictOptions} from '@/api/dict/JDictSelectUtil'
/*
查询字典
data声明需要的字典
dictCode:{
    QPMS_PROBLEM_SHIFT:[]
}
调用接口后获得的值
dictCode:{
    QPMS_PROBLEM_SHIFT:[
        {"value": "0", "text": "白班",  "title": "白班"},
        {"value": "1", "text": "夜班", "title": "夜班" }
    ]
}
template 字典映射
{{ formatDict(dictCode.QPMS_PROBLEM_STATUS,record.status) }}

*/ 
export const dictMixin = {
  data(){
    return {
        dictCode:{
           
        }
    }
  },
  created(){
    this.initDictlist()
  },
  methods:{
    initDict(dict){
        return new Promise((resolve, reject) => {
          initDictOptions(dict).then(res => {
            let result= res.result
            resolve(result)
          })
        })
    }, 
    initDictlist() {
        if(Object.keys(this.dictCode).length == 0){
            return
        }
        var keys=Object.keys(this.dictCode)
        let list = keys.map(async (item, index) => {
            this.dictCode[item]=await this.initDict(item)
            return item
        })
        Promise.all(list).then((value,i) => {    
            console.log('调用字典:',this.dictCode)
        })
      
    },
    formatDict(list,e) {
        if (e || e==0) {
            let obj = list.find((item) => {
                return item.value == e
            })
            if (obj) {
                return obj.text || obj.title 
            } else {
                return e
            }
        } else {
            return ''
        }
    },
  }
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三线码工

码字不易,有钱打赏,没打钱点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值