js for循环遍历每一项异步请求,遍历结束后执行使用promise.all

场景:

数组遍历中每次遍历都需要去请求getStaffCover接口,拿到该接口的结果拼接到数组的每一项,等到数组遍历完之后,拿到拼接好的数组。拼接的数组必须是最终遍历的结果,所以得等到所有的请求结束之后进行操作,使用map可以返回每一次异步请求的Promise合集,注意这里不需要return,然后使用Promise.all等待执行完所有的异步操作,然后才会执行后面的代码

在这里插入图片描述

解决

 const promise = nv.aiFaceData.items.map(async item => {
    
    
            const timelines = [];
            let cover, name;
            !isEmpty(item.existTime.items) &&
              item.existTime.items.forEach(val => {
    
    
                timelines.push({
    
    
                  start: val.startTime,
                  duration: val.endTime - val.startTime
                });
              });
            if (get(item, 'staffId')) {
    
    
              cover = await this.getStaffCover(item.staffId);
              name = item.staffBase.name;
            } else {
    
    
              name = this.getMobileNumber(item.mobileNumber); //如果不是该组织人员,显示手机号
            }
            const itemData = {
    
    
              info: {
    
    
                name,
                cover
              },
              timelines: cloneDeep(timelines)
            };
            aiData.push(itemData);
          });
          await Promise.all(promise);
          this.aiData = cloneDeep(aiData);

猜你喜欢

转载自blog.csdn.net/weixin_44157964/article/details/118578960