Pioneer丶 2022-02-17 16:37 采纳率: 40%
浏览 65
已结题

关于axios异步请求的传值与返回值问题?

问题遇到的现象和发生背景

本人自学练手项目中,遇到断点续传的功能,要在分片全部上传完之后调用接口让后端合并分片,然后等待分片合并完成返回值给前端。
但是每次axios的返回值我不知道怎么通过方法返回给另一个axios请求里面的变量用于判断是否合并分片成功。
axios的异步async和await还未接触,不知道怎么用.

问题相关代码,请勿粘贴截图
upload(param){
    axios.post("/file/admin/upload", param).then((response) => {
                    Loading.hide();
                    const data = response.data;
                    if (data.success) {
                        if (shardIndex < shardTotal) {
                            //上传下一个分片
                            param.shardIndex +=1;
                            //递归
                            _this.upload(param);
                        } else {
                            //调用分片合并
                            if(_this.mergeShard(param)){  //这里返回为promise对象
                                //添加延时,否则前端先接收到数据文件url,后端合并还未完成。
                                // setTimeout(function () {
                                //     //调用暴露给组件外部的函数
                                //     _this.afterUpload(data);
                                // },500);
                                _this.afterUpload(data);
                            }else {
                                Toast.error("分片合并失败!");
                            }
                        }

                        let fileInfo = data.content;
                        console.log("上传文件信息: ", fileInfo);
                        // teacherinfo.value.image=image;
                        //清空控件中的值
                        $('#' + this.inputId + "-input").val("");
                    }
                });
},
 //合并分片
  mergeShard(param){
             //以下返回为promise对象。。。
             return  axios.post("/file/admin/merge", param).then((response)=>{
                  const data=response.data;
                  console.log(data);//返回值为true
                  return data;
              });
          }

运行结果及报错内容
我的解答思路和尝试过的方法

以下为自己的尝试

mergeShard(){
                //以下返回为promise对象,不是boolean类型
                 // return axios.post("/file/admin/merge", param).then((response) => {
                 //               const data = response.data;
                //                console.log(data); //这里返回信息为true
                 //               return data;
                 //           });

                 //以下返回undefined
                  let flag;
                            axios.post("/file/admin/merge", param).then((response) => {
                               const data = response.data;
                               console.log(data); //这里返回信息为true
                               flag=data;
                           });
                            return flag;
            }

async mergeShard(){
                             //以下返回promise对象
                          const response= await axios.post("/file/admin/merge", param);
                          const data = response.data;
                          console.log(data); //这里返回信息为true
                          return data;
            }

我想要达到的结果

mergeShard{}能成功返回axios请求的值。
在upload方法中 if(_this.mergeShard(param)){} 可以成功判断true或false.

  • 写回答

2条回答 默认 最新

  • 「已注销」 2022-02-17 17:32
    关注

    怀疑题主是机器人,这个问题问两次了,有人回答也没有回复,过30分钟左右加些东西又问一遍?

    upload(param) {
      axios.post("/file/admin/upload", param).then((response) => {
        Loading.hide();
        const data = response.data;
        if (data.success) {
          if (shardIndex < shardTotal) {
            //上传下一个分片
            param.shardIndex += 1;
            //递归
            _this.upload(param);
          } else {
            // 这里修改了 
            _this.mergeShard(param).then(res => {
              const data = response.data;
              console.log(data);//返回值为true
              //调用分片合并
              if (data) {
                //添加延时,否则前端先接收到数据文件url,后端合并还未完成。
                // setTimeout(function () {
                //     //调用暴露给组件外部的函数
                //     _this.afterUpload(data);
                // },500);
                _this.afterUpload(data);
              } else {
                Toast.error("分片合并失败!");
              }
            })
          }
    
          let fileInfo = data.content;
          console.log("上传文件信息: ", fileInfo);
          // teacherinfo.value.image=image;
          //清空控件中的值
          $('#' + this.inputId + "-input").val("");
        }
      });
    },
    //合并分片
    mergeShard(param) {
      //以下返回为promise对象。。。
      // 这里修改了 
      return axios.post("/file/admin/merge", param)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?
  • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
  • ¥15 texstudio的问题,
  • ¥15 spaceclaim模型变灰色
  • ¥15 求一份华为esight平台V300R009C00SPC200这个型号的api接口文档
  • ¥15 就很莫名其妙,本来正常的Excel,突然变成了这种一格一页
  • ¥15 字符串比较代码的漏洞
  • ¥15 欧拉系统opt目录空间使用100%
  • ¥15 ul做导航栏格式不对怎么改?