node.js - 等待 Mongoose 查询完成

标签 node.js mongodb mongoose

假设我有以下代码:

function MyClass(id, x, y, z) {
    var self = this;
    MyModel.findByID(id, function(err, model) {
        if(err) { // Do something }
        self.model = model
    });
    this.x = x;
    this.y = y;
    this.z = z;
}

MyClass.prototype.myMethod = function() {
    console.log(this.model.id);
}

var obj = new MyClass(123, 7, 8, 9);
obj.myMethod();

如何确保在 myMethod 中设置 this.model,因为 Mongoose 查询是异步的。或者我是以“非”NodeJS 方式编程?

谢谢

最佳答案

您可以传递一个回调,该回调将在数据库查询结束且目标变量已分配值时运行:

function MyClass(id, x, y, z, fn) {
  var self = this;

  this.x = x;
  this.y = y;
  this.z = z;

  MyModel.findByID(id, function(err, model) {
    self.model = model
    fn.call(self);
  });
};

MyClass.prototype.myMethod = function() {
  console.log(this.model.id);
};

然后使用它:

var obj = new MyClass(123, 7, 8, 9, function() {
  obj.myMethod();
});

关于node.js - 等待 Mongoose 查询完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20536323/

相关文章:

javascript - 函数中的for循环只循环一次

用于异步消息传递的 Node.js REST API 包装器

java - MongoTemplate 按日期转换查找

mongodb - 可选的方法链接,如排序、限制、跳过

javascript - 使用 BabelJs 转译时如何忽略一段代码?

javascript - 如何在mongodb中为用户和管理员赋予不同的权限

javascript - 函数/方法文档中的 [, ... ] 是什么?

node.js - 在 Amazon ec2 上对 Node.js 使用 nohup

javascript - 在 Mongoose 中使用 Virtual 来返回查询的全名

linux - 聚合数十亿条记录时如何修复打开文件过多错误