【问题标题】:mongodb async issue NodeJSmongodb异步问题NodeJS
【发布时间】:2015-02-22 03:41:56
【问题描述】:

我使用 mongodb 已经有一段时间了,并且多次反驳过同样的问题。就像这样:

XCollection.find({})
.each(function (err, x) {
    if (err) throw err;

         branchCollection.findOne(
             {_id: new ObjectID(x.branchId)}
               , function(err, doc){
                       console.log(x.branchId);
               });
.....

我有时会看到 findOne 不能很好地工作,x 文档会因为每个上部而发生变化,这会影响我的代码!我认识到问题是因为这些请求(数据库请求)是异步的。但是处理这个问题的推荐方法是什么?

谢谢, 最好的问候

【问题讨论】:

  • 这是非常模糊和不清楚的:findOne not working very well。您希望发生的事情没有发生,而正在发生的事情呢?
  • 不受干扰,x 可以可靠地用于内部函数,因为它被困在由外部函数形成的闭包中。您的分析似乎不正确,并且其他原因导致您的“工作不佳”。例如,x 是否在 ..... 代码中混淆了?

标签: node.js mongodb asynchronous promise


【解决方案1】:

您不需要使用新的 ObjectID 来查询 ID 字段。一个字符串就足够了。

  branchCollection.findOne(
         {_id: x.branchId}
           , function(err, doc){
                   console.log(doc._id);
           });

另一方面,您不应该在异步调用中使用 x 变量。你应该使用:

console.log(doc._id)

除此之外,我不确定我是否理解您的问题?您是否收到错误消息?

【讨论】:

  • 我打印了 x.branchId 表示我不会处理所有记录。发生的事情是在一些循环之后响应 x.branchId 记录。
  • 变量 x 在 .each() 循环中不断变化。 findOne 回调将在循环完成处理后发生。像这样引用 x 会导致非常奇怪的行为
  • 那么在这种情况下该怎么办?
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
相关资源
最近更新 更多