Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在nodejs中运行嵌套mysql查询时等待查询获得结果_Mysql_Node.js - Fatal编程技术网

如何在nodejs中运行嵌套mysql查询时等待查询获得结果

如何在nodejs中运行嵌套mysql查询时等待查询获得结果,mysql,node.js,Mysql,Node.js,我只是nodejs的初学者。我只是想知道如何等待子查询返回结果?在上面的代码中,我试图设置一个JSON键(“status”)值,该值将由子查询返回。但我总是得到未定义的消息变量。但是,我在控制台中得到消息变量。我认为节点服务器不会等待子查询的结果。解决办法是什么?提前感谢您可以使用async.each 这样做的想法是,您可以执行第一个查询,在该查询中,您可以执行一个同步过程,该过程只有在一切结束时才会结束 您可以在此处阅读更多内容,在您的案例中,您可以从以下内容开始: connection.

我只是nodejs的初学者。我只是想知道如何等待子查询返回结果?在上面的代码中,我试图设置一个JSON键(“status”)值,该值将由子查询返回。但我总是得到未定义的消息变量。但是,我在控制台中得到消息变量。我认为节点服务器不会等待子查询的结果。解决办法是什么?提前感谢

您可以使用
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

});