connection.query('SELECT * from enquiry', function(err, rows, fields) {
if (err) throw err;
var enquiryJson=[];
for (var i in rows) {
var id=1,jsondata,message;
connection.query('SELECT status_message from status where id='+rows[i].status_id, function(err, statusrows, field) {
console.log(statusrows[0].status_message);
message=statusrows[0].status_message;
});
jsondata={
"id": id++,
"name": rows[i].name,
"mobile": rows[i].mobile,
"city": rows[i].city,
"state": rows[i].state,
"nature_of_enq": rows[i].nature_of_enq,
"status": message
};
enquiryJson.push(jsondata);
}
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(enquiryJson));
});
});
我只是nodejs的初学者。我只是想知道如何等待子查询返回结果?在上面的代码中,我试图设置一个JSON键(" status")值,该值将由子查询返回。但我总是将消息变量视为未定义。但是我在控制台中获取了消息变量。我认为节点服务器不等待子查询的结果。可能是什么解决方案?提前致谢
答案 0 :(得分:0)
您可以使用async.each
。
这个想法是你做第一个查询,在那个查询里面你可以做一个只有当一切都结束时才会结束的同步过程。
您可以在此处阅读更多https://github.com/caolan/async#each,在您的情况下,您可以从以下内容开始:
var getStatusMessage = function(row, callback){
//Here yo do your query
//SELECT status_message from status where id='+ row.status_id... bla bla bla
//and you can update your json here
}
async.each(rows, getStatusMessage, function(err){
if(err){
//Something bad happened
}
//enquiryJson.push(jsondata);
//res.setHeader
//res.end ....
//Wathever you wanna do after your queries ends
});