当我像这样从数据库记录数据时:
router.get("/names", async (req, res) => {
ListItemsModel.find({}, function (err, items) {
items.forEach(item => {
console.log(item.name);
});
});
});
但是 om 试图将它保存到数组中,它返回一个空对象:
router.get("/names", async (req, res) => {
let listNames = new Array();
ListItemsModel.find({}, function (err, items) {
items.forEach(item => {
listNames.push(item.name);
});
});
console.log(listNames);
});
有人可以提出解决方案吗?
答案 0 :(得分:1)
ListItemsModel.find
是一个异步调用,因此在 after console.log(listNames);
之后执行。这就是为什么您在该数组中看不到任何内容的原因。
有两种方法可以解决这个问题。
async
函数来处理路由 async (req, res) => {...
,因此您可以轻松地将 await
命令的代码更改为 find
。像这样:router.get("/names", async (req, res) => {
const lists = await ListItemsModel.find();
const listNames = lists.map(x => x.name)
console.log(listNames);
});
console.log(listNames)
移动到回调函数中,您就会得到结果。router.get("/names", async (req, res) => {
let listNames = new Array();
ListItemsModel.find({}, function (err, items) {
items.forEach(item => {
listNames.push(item.name);
});
console.log(listNames);
});
});
答案 1 :(得分:0)
你可以使用这样的回调函数:
有你的路由回调函数
row = transform_row(row)
有一个控制器来运行你的模型逻辑
router.get("/names", async (req, res) => {
let listNames= [];
getListItems((err,items){
if(err) console.log(err)
listNames = items.map((element){
return element.name;
})
})
});