使用promise封装一个下载函数下载完成后弹出提示框
下面是使用 Promise 封装的一个下载函数,下载完成后会弹出一个提示框:
function download(url) {
return new Promise(function(resolve, reject) {
const xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onload = function() {
if (xhr.status === 200) {
const blob = new Blob([xhr.response]);
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'downloaded_file';
a.click();
URL.revokeObjectURL(url);
resolve();
} else {
reject(new Error(xhr.statusText));
}
};
xhr.onerror = function() {
reject(new Error('Network Error'));
};
xhr.send();
});
}
download('http://example.com/file.jpg')
.then(function() {
alert('下载完成');
})
.catch(function(error) {
console.error(error);
});
这个函数使用 XMLHttpRequest 发起 GET 请求,并将 responseType 设置为 'blob',以便获取到文件的二进制数据。然后,根据请求的状态码判断下载是否成功,成功后将文件保存到一个 Blob 对象中,创建一个下载链接,模拟点击下载链接,完成下载。最后,使用 resolve 将 Promise 设置为成功状态,或者使用 reject 将 Promise 设置为失败状态。在调用 download 函数时,可以使用 then 方法指定下载完成后的操作,或者使用 catch 方法处理下载失败的情况
原文地址: https://www.cveoy.top/t/topic/iO9q 著作权归作者所有。请勿转载和采集!