我正在尝试将findById的结果推送到现有数组。我的代码如下所示:
var targetArray = []; var groupId; //从另一个函数中获取ID。
Group.findById((groupId), (error, group) => {
targetArray.push(group.toObject());
console.log(targetArray);
}
console.log(targetArray);
第一个日志返回包含该组的数组,第二个日志返回一个空数组[]。
我尝试使用" .toObject()",我甚至尝试将一个简单的字符串推入数组。离开这个功能后,一切都消失了。
我不知道这是一个特定于猫鼬的问题还是一般的javascript,但通常如果我把某些东西放到一个数组中它就不会消失它自己的。
你们(和女孩们)可能会指出我做错了吗?
答案 0 :(得分:0)
这实际上更多是javascript如何处理异步代码。
这种情况正在发生,因为你传递给findById
一个回调函数,该函数将在javascript调用堆栈中运行一段时间。这意味着只要您调用findById
函数传递这些参数,javascript就会运行底部console.log
,在这种情况下,数组它仍然是空的。
作为参数传递的函数将在mongoose
收到mongo驱动程序的确认时立即运行,并显示一些错误或某些数据。
事实是,这是预期的,如果你真的想对从mongoose
返回的数据做一些事情,你实际上应该在回调函数上做这件事。