vue中aixos如何循环单条数据请求?

发布于 2022-09-11 20:01:32 字数 1358 浏览 9 评论 0

问题描述

Vue项目,后台给一个数据接口返回图片名称,然后我根据这个图片名称,请求下载图片接口,请求的要求是一次只能请求一个图片,请求返回图片base64格式。

问题出现的环境背景及自己尝试过哪些方法

如果是批量下载还好操作,但是我需要的图片有多张,但是一次只能请求一次,我想过是for循环,把请求过来的base64字符串push到数组中,但是axios好像是异步的,而且我感觉这种写有点不对。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
data数据

 data() {
    return {
    imgs:[],
    imglist: ["0522ION3.jpeg", "0522BJD7.jpg"].//请求图片路径
    };
  },

请求方法

downImg() {
      
      for (let item of this.imglist) {
        const fd = new FormData();
        fd.append("path", item);
        downloadBase64(fd)
          .then(res => {
            if (res.status == 200) {
              let imglist = [];
              imglist.push(res.data.code);
               this.imgs =  imglist;
               console.log(imglist);
            
            } else {
              this.$message({
                message: res.content,
                type: "warning"
              });
            }
          })
          .catch(res => {
            console.log(res);
          });
      }
    },

单个请求后台返图片base64码

{
    "status": 200,
    "code": "",
    "msg": "操作成功!",
    "remark": "",
    "data": {
        "code": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAw....
  }

你期待的结果是什么?实际看到的错误信息又是什么?

如何解决同步请求,或者更好的方法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

心碎无痕… 2022-09-18 20:01:32

用async/await很容易搞

const request = (n) => new Promise(resolve => setTimeout(() => resolve(n), 1000))

const task = [1, 2, 3, 4]

async function walk(list) {
  const results = []
  while (list.length) {
    let res = await request(list.shift())
    console.log('request success! response is ', res)
    results.push(res)
  }

  return results
}

walk(task)
    .then(res => {
      console.log(res)
    })
    .catch(err => {
      console.log(err)
    })
晚风撩人 2022-09-18 20:01:32

Promise.all了解一下

财迷小姐 2022-09-18 20:01:32

Promise.all满足不了你的需求

这样写应该可以

async downImg() {
  for (let item of this.imglist) {
    const fd = new FormData();
    fd.append("path", item);
    const res = await downloadBase64(fd)
    if (res.status == 200) {
      let imglist = [];
      imglist.push(res.data.code);
      this.imgs =  imglist;
      console.log(imglist);
    } else {
      this.$message({
        message: res.content,
        type: "warning"
      });
    }
  }
},
坏尐絯 2022-09-18 20:01:32

更新:噢,我知道了,应该是顺序的问题,那么我觉得楼上的async/await应该可以

菜鸡我觉得好像。。没毛病啊。。就是这里是不是该这么写:

if (res.status == 200) {
    this.imgs.push(res.data.code);
}
半枫 2022-09-18 20:01:32

Promise.all应该不太合适,按顺序的话Promise.then更合适

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文