首页 > 解决方案 > NodeJS:异步等待的产品颜色模型问题

问题描述

在这段代码中,我得到了类似(红色、绿色、蓝色)的颜色字符串,并将其转换为颜色数组。然后,如果颜色已经存在,我循环抛出这个数组并在我的 mongodb 数据库中搜索颜色集合。

如果是,那么我会将文档 ID 推送到 colorsDocIds 并将产品 ID 推送到 colorDocument.product 中,然后我保存文档以使用推送的新产品 ID 更新它。

如果集合中不存在 ,那么我将创建一个并将新的颜色文档 ID 推送到常量中。最后我将colorsDocIds 放入product.colors 字段中。

问题是当我尝试以某种方式做到这一点时,产品文档中的颜色字段可能具有 id 数组,有时它没有。我看到这个问题可能与异步/等待有关。

  const colorsArray = colors.split(',').map((color) => color.trim());
  const colorsDocIds = [];

  colorsArray.forEach(async (color) => {
    const colorDocument = await Color.findOne({ color });

    if (!colorDocument) {
      const newColor = await Color.create({ product: product.id, color });
      colorsDocIds.push(newColor.id);
    } else {
      colorsDocIds.push(colorDocument.id);
      colorDocument.product.push(product.id);
      await colorDocument.save();
    }
  });

  product.colors = colorsDocIds;
  await product.save();

标签: node.jsmongodbasync-await

解决方案


请看一下这个答案:

NodeJs Promises - 尝试在等待的同时运行异步

您遇到的问题是 for each 以异步方式运行。


推荐阅读