首页 > 解决方案 > ForEach 在函数完成后执行

问题描述

我的代码有问题。我需要检查 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

标签: javascriptnode.jstypescripttypeorm

解决方案


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

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

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);
}

推荐阅读