問題引出:
今天做項目時,遇到這樣一個情況,長傳圖片或者視頻等文件時,能夠選擇多個,但是每一個要請求一次接口,這就出現了一個問題,每一次請求之間都是有依賴關係的,如果使用ajax的重重嵌套,會顯得比較麻煩,而且容易產生回調地獄,所以我使用了promise.all + axios來解決這個問題,也可以使用async,await等。
代碼如下:
let promiseArr = [];
//fileList是上傳的多個文件的數組
this.fileList.forEach((item) => {
let fileDate = new FormData();
fileDate.append('fodder', item.raw);
let config = {
headers: {
'Content-type': 'multipart/form-data'
},
// 調用axios,axios返回的是promise對象
var p1 = axios.post('/fodder/upload', fileDate, config);
//將promise對象加入數組中
promiseArr.push(p1);
});
// 調用Promise.all(),promiseArr中的promise全執行成功後才執行then中的代碼,否則執行catch
Promise.all(promiseArr)
.then((res) => {
this.$message({
message: '圖片上傳成功!',
type: 'success'
});
})
.catch((err) => {
this.$message({
message: '圖片上傳失敗!',
type: 'warning'
});
});
}