4

鉴于 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 服务器获取解决方案之前完成的。

定义解决方案后,如何使其呈现页面?我知道它真的很小而且很愚蠢,并且确实是节点的核心,但请帮助我理解。

4

1 回答 1

6

connection.query 的第二个参数是在数据库返回后运行的回调。为什么不将 res.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.js 时,回调可能会有点棘手。您只需要考虑需要发生的步骤以及哪些是异步的。从那里您只需要确保您的回调允许该过程继续。

于 2012-09-10T17:09:39.903 回答