除了Promise.all(),使用Promise.allSettled()方式请求,避免使用循环请求

发布时间 2023-12-13 17:39:17作者: SKa-M
 const getFilePromises: Promise<any>[] = [];
 fileIds.forEach((item) => {
    getFilePromises.push(getFileInfoApi({ id: item }));
  });
  Promise.allSettled(getFilePromises)
    .then((res) => {
      this.fileList = res.map((item, index) => {
        if (item.status == 'fulfilled' && item.value?.data) {
          const { name, url, id, suffix } = item.value?.data;
          return { uid: id, name, status: 'done', url, fileType: suffix };
        } else {
          return {
            uid: fileIds[index],
            name: '加载错误',
            status: 'error',
            url: ''
          };
        }
      });
    })
    .catch((res) => {
      this.fileList = fileIds.map((item) => {
        return { uid: item, name: '加载错误', status: 'error', url: '' };
      });
    });

1.创建getFilePromises的promise类型变量。
2.把请求通过同步循环的方式push到变量中。
3.在使用Promise.allSettled(变量)一次性请求拿到所有数据。