如何在nodejs中运行嵌套mysql查询时等待查询获得结果
我只是nodejs的初学者。我只是想知道如何等待子查询返回结果?在上面的代码中,我试图设置一个JSON键(“status”)值,该值将由子查询返回。但我总是得到未定义的消息变量。但是,我在控制台中得到消息变量。我认为节点服务器不会等待子查询的结果。解决办法是什么?提前感谢您可以使用如何在nodejs中运行嵌套mysql查询时等待查询获得结果,mysql,node.js,Mysql,Node.js,我只是nodejs的初学者。我只是想知道如何等待子查询返回结果?在上面的代码中,我试图设置一个JSON键(“status”)值,该值将由子查询返回。但我总是得到未定义的消息变量。但是,我在控制台中得到消息变量。我认为节点服务器不会等待子查询的结果。解决办法是什么?提前感谢您可以使用async.each 这样做的想法是,您可以执行第一个查询,在该查询中,您可以执行一个同步过程,该过程只有在一切结束时才会结束 您可以在此处阅读更多内容,在您的案例中,您可以从以下内容开始: connection.
async.each
这样做的想法是,您可以执行第一个查询,在该查询中,您可以执行一个同步过程,该过程只有在一切结束时才会结束
您可以在此处阅读更多内容,在您的案例中,您可以从以下内容开始:
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));
});
});
您可以使用
aync.each
()并在一切结束时调用回调函数。那么如何传递状态id?@John,您不需要传递状态id,getStatusMessage
函数将获取每一行的值,并从那里进行迭代。为了澄清这一点,我已经更新了我的答案。
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
});