问题遇到的现象和发生背景
本人自学练手项目中,遇到断点续传的功能,要在分片全部上传完之后调用接口让后端合并分片,然后等待分片合并完成返回值给前端。
但是每次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.