以下のコードスニペットに取り組んでいます。「stuObjList」という JSON オブジェクトの配列があります。配列をループして、特定のフラグが設定された特定の JSON オブジェクトを検索し、データベース呼び出しを行ってさらにデータを取得したいと考えています。
もちろん、FOR ループはデータベース呼び出しが戻るのを待たず、with j == length の最後に到達します。データベース呼び出しが戻ると、インデックス「j」は配列インデックスを超えています。node.js がどのように機能するかを理解しています。これは予期される動作です。
ここでの回避策は何ですか?達成しようとしていることをどのように達成できますか?
...............
...............
...............
else
{
console.log("stuObjList.length: " + stuObjList.length);
var j = 0;
for(j = 0; j < stuObjList.length; j++)
{
if(stuObjList[j]['honor_student'] != null)
{
db.collection("students").findOne({'_id' : stuObjList[j]['_id'];}, function(err, origStuObj)
{
var marker = stuObjList[j]['_id'];
var major = stuObjList[j]['major'];
});
}
if(j == stuObjList.length)
{
process.nextTick(function()
{
callback(stuObjList);
});
}
}
}
});