将值推入数组
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>
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>