Javascript 如何获取此数组的值
})) 在使用findOne搜索值之后,我将其推入abc数组。由于数组是一个异步函数,如何将其作为res.json发送Javascript 如何获取此数组的值,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,})) 在使用findOne搜索值之后,我将其推入abc数组。由于数组是一个异步函数,如何将其作为res.json发送 router.post('/ingredients', (req, res) => { var abc = []; var a = data.toString().split("\r\n"); var arr = a.toString().split(","); arr.forEach(
router.post('/ingredients', (req, res) => {
var abc = [];
var a = data.toString().split("\r\n");
var arr = a.toString().split(",");
arr.forEach(function (i, e) {
if (i != "\r" && i != "\n" && i != "" && i != " ")
{
var v = i.trim().toLowerCase();
Ingredient.findOne({name: v}, (err, us) => {
if(us)
{
var rr = {
name: us.name,
category: "haram"
}
abc.push(rr);
}
});
}
})
})
这会解决你的问题。基本上,您创建一系列承诺,然后等待所有承诺得到解决。更优雅的解决方案是使用异步/等待方法。您必须等待所有承诺完成,例如使用
Promise。all
您的意思是将其作为响应发送吗?您是否尝试过res.json({})@塔普拉我该怎么做?我正在我的应用程序中使用回调function@themagicbean回答是。但在异步函数中,它是空的。@Taplar是的,这是mongoose。我粘贴了整个代码,但是stackoverflow不让我粘贴,所以我不得不删除其中的一些代码。
router.post('/ingredients', (req, res) => {
var abc = [];
var a = data.toString().split("\r\n");
var arr = a.toString().split(",");
var promises = [];
arr.forEach(function (i, e) {
if (i != "\r" && i != "\n" && i != "" && i != " ") {
var v = i.trim().toLowerCase();
promises.push(new Promise((resolve, reject) => {
Ingredient.findOne({ name: v }, (err, us) => {
if (us) {
var rr = {
name: us.name,
category: "haram"
}
abc.push(rr);
}
resolve();
});
}))
}
})
Promise.all(promises).then(() => {
res.json(abc);
})
});