【问题标题】:ForEach executing after function finished [duplicate]ForEach 在函数完成后执行 [重复]
【发布时间】:2021-04-30 17:23:55
【问题描述】:

我的代码有问题。我需要检查cutlist数组中是否有一个material_id在材料数据库中不存在的项目,但是forEach中的代码在函数完成后执行。

const errors: string[] = [];

await orderData.cutlist.forEach(async cutlist => {
  const doesMaterialExist = await this.materialsRepository.findMaterialById(
    cutlist.material_id,
  );

  if (!doesMaterialExist) {
    errors.push('Material does not exist');
  }

 console.log('1')
});

console.log('2')

if (errors.length > 0) {
  throw new AppError('There is a invalid material in cutlists', 404);
}

执行此代码后我的控制台是 2 -> 1。它正在检查 ForEach 循环之前的 errors.length

【问题讨论】:

    标签: javascript node.js typescript typeorm


    【解决方案1】:

    你不能在 forEach 循环之前使用await。有办法做到这一点,但在你的情况下,这不是必需的。

    您可以将forEach 转换为for 循环,您的问题将得到解决。

    const errors: string[] = [];
    
    for(var cutlist in orderData.cutlist){
      const doesMaterialExist = await this.materialsRepository.findMaterialById(
        cutlist.material_id,
      );
    
      if (!doesMaterialExist) {
        errors.push('Material does not exist');
      }
    
     console.log('1')
    };
    
    console.log('2')
    
    if (errors.length > 0) {
      throw new AppError('There is a invalid material in cutlists', 404);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-30
      • 1970-01-01
      • 2017-11-10
      • 2017-08-03
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      相关资源
      最近更新 更多