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

关于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条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

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

      悬赏问题

      • ¥20 有ASP .NET MVC做的小说阅读网站吗?
      • ¥20 beeline客户端支持ipv6地址连接hive服务
      • ¥15 香农解码的代码问题,无法输出解码结果
      • ¥15 Python操作注册表
      • ¥45 入门级别的一段VUE前端拍照像后端发送请求的代码,帮排错
      • ¥15 anaconda打开spyder后一直闪退,不知道怎么办
      • ¥15 解决迷宫问题中无法运行的问题
      • ¥15 关于aspnetcore中使用mqttnet库的entire
      • ¥15 关于#python#的问题,请各位专家解答!
      • ¥100 关于远控软件的两个问题