Node.js व्यवहार अतुल्यकालिक है, प्रोग्रामर को इस व्यवहार को ध्यान में रखते हुए कोड करना होगा। कॉलबैक या वादे या प्रवाह नियंत्रण पुस्तकालय का प्रयोग करें। अपने प्रोग्राम में, आपने mongo query को लूप के अंदर रखा है, जो कि क्वेरी करने का एक बुरा तरीका है। इसके बजाय यदि कई बार क्वेरी कर रहे हैं, तो $in ऑपरेटर का उपयोग करें। यह आपके कोड प्रदर्शन को अनुकूलित करेगा और आपकी प्रतिक्रिया भेजने की समस्या को भी हल करेगा।
var resultSet = [];
db.get('busstopcollection').find({id_bus_stop: parseInt(req.body.busstopid)}, function(e, docs){
if(e || docs.length === 0) {
console.log("Sorry, wrong id.");
return e;
}
var bus_ids = [];
for(var m=0; m<docs.length; m++){
var auxRes = {};
auxRes.id_bus = docs[m].id_bus;
bus_ids.push(parseInt(docs[m].id_bus)); // collect all ids
auxRes.id_bus_stop = docs[m].id_bus_stop;
auxRes.coord_x = docs[m].coord_x;
auxRes.coord_y = docs[m].coord_y;
auxRes.id_bus_variation = docs[m].id_bus_variation;
resultSet.push(auxRes);
}
// Query at one time for all document
db.get('buscollection').find({id_bus: {$in : bus_ids}}).toArray( function(e, busDocs){
// Now find and merge in one go
busDocs.forEach(function(eachBusDoc){
for(var i=0,len = resultSet.length;i< len;i++){
if(resultSet[i].id_bus == busDocs.id_bus ){
resultSet[i].s_origin_description = eachBusDoc.s_origin_description;
resultSet[i].s_destination_description = eachBusDoc.id_destination_description;
}
}
});
res.send(JSON.stringify(resultSet));
});
});