等待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(); 

如何确保this.modelmyMethod设置,因为Mongoose查询是asynchronous的。 还是我用“非”NodeJS方式编程?

谢谢

您可以传递在数据库查询结束时将运行的callback函数,并且已为目标variables赋值:

 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(); });