私は nodejs を使用して、Mongodb から Mongoose 経由でデータをクエリしています。データを取得した後、クライアントに応答する前にそのデータに対して何かをしたいです。しかし、戻り値を取得できません。Google で調べたところ、Node.js 関数は非同期 JavaScript 関数 (非 I/O ブロッキング) であることがわかりました。この tut ( http://www.youtube.com/watch?v=xDW9bK-9pNY ) を試してみましたが、うまくいきません。以下は私のコードです。myObject は「find()」関数内で評価され、「find()」関数外では未定義です。では、データを取得するにはどうすればよいでしょうか。ありがとう!
var Person = mongoose.model('Person', PersonSchema);
var Product = mongoose.model('Product', ProductSchema);
var myObject = new Object();
Person.find().exec(function (err, docs) {
for (var i=0;i<docs.length;i++)
{
Product.find({ user: docs[i]._id},function (err, pers) {
myObject[i] = pers;
console.log(myObject[i]); //return the value is ok
});
console.log(myObject[i]); //return undefined value
}
console.log(myObject); //return undefined value
});
console.log(myObject); //return undefined value
app.listen(3000);
console.log('Listening on port 3000');