js - 在map中使用async await进行处理文件的操作

在日常开发中 用户上传图片需要得到文件的base64格式进行回显;当用户选择多个时,需要循环的调用file转base64的方法进行同步的获取;就会用到promsie;但在map循环的过程中使用async await得到的是一个 promise对象并不是一个 ba64编码;
解决方法:可以通过Promise.all()方法进行解决

file类型转base64的 方法使用了promise

/**
 * 将file文件转化为base64 使用promise
 * @param file 该文件的file类型
 */
export function fileTransferBase64(file) {
    return new Promise((resolve, reject) => {
      const reader = new FileReader(); //异步读取
      reader.readAsDataURL(file);
      // 成功和失败返回对应的信息,reader.result一个base64,可以直接使用
      reader.onload = (e) => {
        resolve(e.target.result);
      };
      // 失败返回失败的信息
      reader.onerror = (error) => {
        console.warn('file文件转化为base64s失败:', error);
        reject(error);
      };
    });
}

正确使用:
fileList 是一个数组 里面是多个file文件类型;这里循环每个file并都放到一个对象里面,且还添加了一个content属性 (file的base64格式)

 let base64List = await Promise.all(
        fileList.map(async (item) => {
          return { file: item, content: await fileTransferBase64(item) };
        })
      );

错误使用:

我刚开始也是这样直接用的,但返回的content是一个【promise】对象;没法用。大家注意一下不要再这样用了;

 let base64List = fileList.map(async (item) => {
     return { file: item, content: await fileTransferBase64(item) };
 })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值