1,js办法封装
//util.js//一些发动申请的依赖import gql from 'graphql-tag'import initapolloclient from '@/assets/js/apolloclient.js'import $store from '@/store/index' // 依据openid获取人员姓名 // openid的取值matchkey // 匹配后将姓名set到readkey字段中export const gerMultiUsername = async(origindata, matchkey, readkey) => { let allopenids = origindata.map((item) => item[matchkey]); allopenids = [...new Set(allopenids)]; let queryinputs = []; //形参 let queryinputsval = {}; //实参 let querybody = []; //申请体 allopenids.forEach((item, index) => { queryinputs.push(`$keywords${index}:String`); queryinputsval[`keywords${index}`] = `${item}`; //openid进行过滤 querybody.push(`queryuser${index}:users( keywords:$keywords${index} ){ edges{node{name openid}} }`) }) let queryall = `query ( ${queryinputs.join()}){ ${querybody.join('')} }`; const iamuri = ($store.state.api_gateway_uri + "/iam"); const iamclient = initapolloclient.initAppllo(iamuri); await iamclient.query({ query: gql(queryall), variables: queryinputsval }).then((res) => { if (res.data) { let successitem = [] for (let key in res.data) { if (res.data[key]) { if (res.data[key].edges && res.data[key].edges.length == 1 && res.data[key].edges[0].node) { successitem.push(res.data[key].edges[0].node) } } } // if (successitem && successitem.length) { successitem.forEach((item) => { if (item.openid) { origindata.forEach((nitem) => { if (item.openid == nitem[matchkey]) { nitem[readkey] = item.name ? item.name : nitem[matchkey] } }) } }) } } }).catch((err) => { console.log(err) })}
2:vue文件中引入应用
<script>import {gerMultiUsername} from '@/assets/js/utils'methods:{getAccessLogs(){ this.$apollo.query({ query: gqlreq.accessLogs, variables:{ first:20, offset:0 } }).then(async (res) => { if (res.data && res.data.accessLogs&& res.data.accessLogs) { let logs=commonjs.takeoffEdges(res.data, "accessLogs"); if((logs&&logs.length)){ //转openid为人员姓名 // 读取account为openid,匹配后将姓名set到accountname字段中 await gerMultiUsername(logs,'account','accountname').catch(()=>{}) this.tabledata=logs } }).catch((e)=>{ console.log('catch err',e) })}}</script>
3:控制台申请
依据图2、3可见,尽管查问了两个人的openid,然而控制台只发动了一个申请。返回后果中也依据query语句返回了两个申请后果。如果某一个申请产生谬误,会在对应申请后果中返回错误信息,并不会净化其余申请。
绝对于promise.all更加晋升性能,也更便于谬误定位及解决。