在Vue.js中,如果你在按钮点击事件中同时调用两个接口来导出两个文件,但有时只导出一个文件,可能是由于以下几个原因导致的:
window.open
或iframe
)。setTimeout
在两个下载请求之间添加一个短暂的延迟。Promise
或async/await
确保一个下载请求完成后再触发另一个。Blob
和URL.createObjectURL
来处理文件数据。以下是一个使用async/await
确保两个下载请求顺序执行的示例:
methods: {
async downloadFiles() {
try {
// 调用第一个接口下载第一个文件
const response1 = await this.$http.get('/api/download/file1', { responseType: 'blob' });
const url1 = window.URL.createObjectURL(new Blob([response1.data]));
const link1 = document.createElement('a');
link1.href = url1;
link1.setAttribute('download', 'file1.pdf');
document.body.appendChild(link1);
link1.click();
document.body.removeChild(link1);
// 等待第一个文件下载完成后再调用第二个接口
const response2 = await this.$http.get('/api/download/file2', { responseType: 'blob' });
const url2 = window.URL.createObjectURL(new Blob([response2.data]));
const link2 = document.createElement('a');
link2.href = url2;
link2.setAttribute('download', 'file2.pdf');
document.body.appendChild(link2);
link2.click();
document.body.removeChild(link2);
} catch (error) {
console.error('下载文件失败:', error);
}
}
}
通过确保两个下载请求的顺序执行,或者使用不同的下载方式,可以避免只导出一个文件的问题。同时,确保代码逻辑正确,并且两个接口都能成功返回文件数据。