将值推入数组

Pushing values to array

router.get("/api/cart", auth, async (req, res) => {
  try {
    const user = await User.findById(req.user._id);
    items = [];
    await user.cartProducts.forEach(async (product) => {
      var item = await Item.findById(product._id);
      items.push(item);
      console.log(items);
    });
    console.log(items)
    res.send(items);
  } catch (e) {
    res.status(500).send(e);
  }
});

我想将用户选择的所有产品的数据发送回数组中。 第一个控制台日志显示带有产品的阵列。而第二个显示空数组。 此外,api 运行良好,没有任何问题。 就个人而言,我认为问题出在我的 javascript 概念上。

await 不适用于 .forEach。你需要使用 for :

items = [];

for(let product of user.cartProducts) {
   let item = await Item.findById(product._id);
   items.push(item);
}
console.log(items)
res.send(items);

编辑:

此外,此方法将终止您的数据库。如果您需要获取 100 个产品,那么您将向数据库发出 100 个请求。

您可以在一个请求中获得相同的结果:

const ids = user.cartProducts.map( p => p._id ); // Array of _id

const items = await Item.find({
    _id : {
         $in : ids
    })
    .lean() // Returns simple JSON, faster

这将有助于您推送选定的值

$(document).ready(function () {

  var tmp = [];
  
  $("input[name='checkbox']").change(function() {
  var checked = $(this).val();
    if ($(this).is(':checked')) {
      tmp.push(checked);
    }else{
    tmp.splice($.inArray(checked, tmp),1);
    }
  });
 
  $('#button').on('click', function () {
        alert(tmp);
  });
  
});
<input name="checkbox" value="1" type="checkbox" />
<input name="checkbox" value="2" type="checkbox" />
<input name="checkbox" value="3" type="checkbox" />
<input name="checkbox" value="4" type="checkbox" />
<button id="button" type="button">button</button>