【问题标题】:Mongoose - cant push the result of findById into arrayMongoose - 无法将 findById 的结果推送到数组中
【发布时间】:2017-06-09 05:14:59
【问题描述】:

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

var targetArray = []; 变量组ID; //从另一个函数获取ID。

Group.findById((groupId), (error, group) => {
  targetArray.push(group.toObject());
  console.log(targetArray);
}
console.log(targetArray);

第一个日志返回包含组的数组,第二个日志返回一个空数组[]。

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

我不知道这是特定于猫鼬的问题还是一般的 javascript,但通常如果我将某些内容推入数组,它不会自行消失。

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

【问题讨论】:

  • 此操作是异步的,因此需要一些时间才能完成,而当您将 console.log() 数组设为 targetArray 时,它仍然为空。

标签: javascript arrays function mongoose


【解决方案1】:

这其实更多的是 javascript 处理异步代码的方式。

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

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

事实是这是意料之中的,如果你真的想对从mongoose返回的数据做一些事情,你实际上应该在回调函数上做。

【讨论】:

  • 谢谢,这帮助我理解了为什么我的代码不起作用。通过解决方法修复了该问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
相关资源
最近更新 更多