1

我正在尝试编写一个执行两个查询的函数,并且我希望能够访问最终代码块中的两个记录集;我的代码类似于:

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 结果保留了第一个记录集,直到第二个查询 @304 并显示“未定义”@309(在以前的显示中有记录集)。

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

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

结果仍然未定义@309

帮助表示赞赏。

4

2 回答 2

3
  1. 回调参数名称完全由您选择。有一个规范告诉您将传递给哪个参数,并且可以命名插槽以帮助进一步描述,但是传递给它的实际参数的实际名称取决于您。对于将来阅读代码的其他人来说,保留预期的名称是一个好主意,但可以在方便的地方进行更改。这意味着如果有帮助,您可以在回调中使用 results1 和 results2 而不是只使用结果。
  2. 您的第二个回调是一个闭包,可以读取定义它的块中的变量。
  3. 我听说将匿名函数回调命名为不好的做法。
???    // 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   });
于 2013-08-16T02:18:24.803 回答
0

将变量的名称从结果更改为应用程序;现在工作;一定是关于“结果”标签的神奇之处;使用 mysql.Connection。

于 2013-08-16T03:40:01.817 回答