以下のコードスニペットをご覧ください。2番目のMongoDBクエリは、最初のクエリの結果を取得した後でのみ実行する必要があります。しかし、ご想像のとおり、この順序では発生しません。
db.collection('student_profile', function (err, stuColl) {
//This if-else can be refactored in to a seperate function
if (req.params.stuId == req.header('x-stuId')) {
var stuInQuestion = student;
} else {
var stuInQuestionId = new ObjectID.createFromHexString(req.params.stuId);
stuColl.findOne({
'_id': stuInQuestionId
}, function (err, stuInQuestionObj) {
if (!stuInQuestionObj) {
process.nextTick(function () {
callback(null);
});
} else {
var stuInQuestion = stuInQuestionObj;
}
});
}
stuColl.find({
'_id': {
$in: stuInQuestion['courses']
}
}).limit(25).sort({
'_id': -1
}).toArray(function (error, courses) {
if (error) {
process.nextTick(function () {
callback(null);
});
} else {
process.nextTick(function () {
callback(courses);
});
}
});
});
それで、ここでの私の選択は何ですか?
制御フローライブラリを必要としない方法でこれをコーディングする方法はありますか?はいの場合、誰かが私に方法を教えてもらえますか?
これで制御フローライブラリを使用する必要がある場合、どちらを使用すればよいですか?asynch、FuturesJs、他に何かありますか?