下面是使用 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 方法处理下载失败的情况

使用promise封装一个下载函数下载完成后弹出提示框

原文地址: https://www.cveoy.top/t/topic/iO9q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录