附件列图片获取改为PromiseAll

情况:

  • 后端传过来的附件信息与其他表单信息放在了一个对象里。
  • 附件信息的值不是图片而是图片id字符串(多个图片会有,分割)

我需要做的:

  • 提取出所有的代表附件的参数。
  • 通过id走图片接口获取到图片地址。
  • 图片和前端参数对应。

以前采用的是非常简单有效但很慢的循环+await。真的太太太慢了,所以决定改为PromiseAll。

  • 建立前端属性名和后端参数名的对应配置对象。
export const apiName = {
  前端属性名: "后端参数名",
  backCard: "bank_card",
  profilePicture: "profile_picture",
  ......
};
  •  生成对应数组
/**
 * @description: 生成对应数组
 * @param {*} form
 * @param {*} apiData
 * @return {*}
 */
function createFormToApiName(form, apiData) {
  const keys = Object.keys(form);
  const nameValueArr = [];
  for (let i = 0; i < keys.length; i++) {
    const keyName = keys[i];
    if (keyName in apiName) {
      const imgIdsStr = apiData[apiName[keyName]];
      if (!!imgIdsStr) {
        const imgIdArr = imgIdsStr.split(",");
        imgIdArr.forEach(id => {
          nameValueArr.push({
            name: keyName,
            imgId: id
          });
        });
      }
    }
  }
  return nameValueArr;
}
  • PromiseAll

export function getImgByIdOmPromiseAll(arr) {
  const promises = arr.map(item => {
    return getImgOnApi(item);
  });
  return Promise.all(promises);
}
function getImgOnApi({ name, imgId }) {
  return new Promise((resolve, reject) => {
    apiGetImage(imgId)
      .then(res => {
        if (res.data) {
          ...数据处理
          resolve({
            name,
            imgUrl: res.data
          });
        } else {
          reject("图片获取失败");
        }
      })
      .catch(err => {
        reject("连接频繁,请稍后再试!");
      });
  });
}
  • 拼起来
/**
 * @description: 设置api图片信息
 * @param {*} form
 * @param {*} apiData
 * @return {*}
 */
export async function setApiAttachment(form, apiData) {
  const nameValueArr = createFormToApiName(form, apiData);
  if (nameValueArr.length > 0) {
    getImgByIdOmPromiseAll(nameValueArr)
      .then(res => {
        res.forEach(item => {
          form[item.name].push(item.imgUrl);
        });
      })
      .catch(reason => {
        Message.error(reason);
      });
  }
}

整体大概就是这个思路~粗糙记下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值