Javascript Mongoose-无法将findById的结果推入数组

Javascript Mongoose-无法将findById的结果推入数组,javascript,arrays,function,mongoose,Javascript,Arrays,Function,Mongoose,我试图将findById的结果推送到现有数组中。我的代码如下所示: var targetArray=[]; var-groupId//从另一个函数获取ID Group.findById((groupId), (error, group) => { targetArray.push(group.toObject()); console.log(targetArray); } console.log(targetArray); 第一个日志返回包含组的数组,第二个日志返回空数组[] 我

我试图将findById的结果推送到现有数组中。我的代码如下所示:

var targetArray=[]; var-groupId//从另一个函数获取ID

Group.findById((groupId), (error, group) => {
  targetArray.push(group.toObject());
  console.log(targetArray);
}
console.log(targetArray);
第一个日志返回包含组的数组,第二个日志返回空数组[]

我尝试了使用“.toObject()”和不使用“.toObject()”,甚至尝试了将一个简单字符串推入数组。我离开函数后,一切都消失了

Group.findById((groupId), (error, group) => {
  targetArray.push(group.toObject());
  console.log(targetArray);
}
console.log(targetArray);
我不知道这是猫鼬特有的问题还是一般的javascript,但通常情况下,如果我将某个东西放入数组中,它不会自行消失


你们能指出我做错了什么吗?

这实际上是javascript处理异步代码的更多方式

这是因为您正在向
findById
传递一个回调函数,该函数将在javascript调用堆栈中运行一段时间。这意味着,只要调用传递这些参数的
findById
函数,javascript就会运行底部的
console.log
,在这种情况下,数组仍然为空

作为参数传递的函数将在
mongoose
接收并确认来自mongo驱动程序的错误或数据后立即运行


事实上,这是意料之中的,如果您真的想处理从
mongoose
返回的数据,您实际上应该在回调函数上执行该操作。

此操作是异步的,因此需要一些时间才能完成,在您创建
console.log()时
数组
targetArray
仍然是空的。谢谢你,这帮助我理解了为什么我的代码不起作用。通过一个变通方法解决了这个问题
Group.findById((groupId), (error, group) => {
  targetArray.push(group.toObject());
  console.log(targetArray);
}
console.log(targetArray);