NodeJS获取并传递变量

时间:2012-09-10 17:01:22

标签: node.js variables asynchronous

鉴于node.js的异步特性,我在查找变量“传递”时遇到了一些麻烦(我知道这不是正确的术语,我会解释)。

请查看以下内容:

connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if(err) {
    throw err;
  }
  var solution = rows[0].solution;
});

res.render('index', { title: solution });

你可以想象,我得到了reference error, solution is not defined。 这是因为res.render是在从mysql服务器获取解决方案之前完成的。

一旦定义了解决方案,如何让它呈现页面?我知道这是一个非常小而且愚蠢的事情,并且真的是节点的核心,但请帮助我理解。

1 个答案:

答案 0 :(得分:6)

connection.query的第二个参数是你在数据库返回后运行的回调。为什么不把res.render行放在回调中呢?这样,在准备好数据之前不会调用render函数。

connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if(err) throw err;
  var solution = rows[0].solution;
  res.render('index', { title: solution });
});

当您第一次开始使用Node时,回调可能会有点棘手。您只需要考虑需要发生的步骤以及哪些步骤是异步的。从那里你只需要确保你的回调允许进程继续。