在node.js中嵌套asynchronous查询

我试图编写一个函数,做两个查询,我希望能够访问最终的代码块中的两个logging集; 我的代码看起来类似于:

295 connection.query(sql1, function selectDb(err, results, fields) { 296 if (err) { 297 throw err; 298 } 299 300 result = results[0]; 301 console.log(result); 302 303 console.log(sql2); 304 connection.query(sql2, function selectDb(err, results, fields) { 305 if (err) { 306 throw err; 307 } 309 console.log(result); 

问题是var结果保留第一个logging集,直到第二个查询@ 304之后,并显示'undefined'@ 309(有前面显示的logging集)。

我不知道如何将第一个logging集值传递给内部代码asynchronous代码块@ 304; 试图添加结果作为参数;

 304 connection.query(sql2, function selectDb(err, results, fields, result) { 

结果仍然undefined @ 309

帮助赞赏。

  1. callback参数名称完全是您的select。 有一个规范告诉你什么会被传入到哪个参数中,并且可以通过命名槽来帮助进一步的描述,但是实际参数的实际名称取决于您。 保持预期的名字对于未来阅读代码的人来说是一个好主意,但是在适当的时候可以变化。 这意味着您可以在callback中使用results1和results2,而不仅仅是结果,如果有帮助的话。
  2. 你的第二个callback函数是一个闭包,可以读取定义块中的variables。
  3. 我听说这是不好的做法,命名你的匿名函数callback。
 ??? // variables sql1, sql2 need to be defined prior to the code below 295 connection.query(sql1, function(err, results1, fields1) { 295.1 var result; // dont make result a global 296 if (err) { 297 throw err; 298 } 299 300 result = results1[0]; 301 console.log(result); 302 303 console.log(sql2); 304 connection.query(sql2, function(err, results2, fields2) { 305 if (err) { 306 throw err; 307 } 309 console.log(result); 310 console.log(results1); 311 console.log(results2); 312 }); 313 }); 

将结果的名称从结果更改为应用程序; 现在工作; 必须对标签“结果”有所裨益; 使用mysql.Connection。