【问题标题】:node-mysql how to use result outside of an anonymous functionnode-mysql 如何在匿名函数之外使用结果
【发布时间】:2014-05-05 01:52:10
【问题描述】:

我有一个如下查询:

connection.query('SELECT * FROM `Users` WHERE `Id` = ?;', [Id], function (err, row) {
var a = row;
});

//how can I use variable `a` in here?

【问题讨论】:

  • 这是基本的 javascript,我强烈建议阅读有关 javascript 和回调的基本教程
  • 您需要将 connection.query() 之后的内容移动到回调中,或者,也许更好的是,调用一个函数并将行变量传递给它。
  • 您应该明白,即使在您的示例回调中定义为内联您也可以传递函数名称,并不是查询的结果在查询内部,它们被传递给函数并且可以定义其他地方(但在可访问范围内)

标签: javascript node.js node-mysql


【解决方案1】:

你真的做不到。至少不容易。

var a;
connection.query('SELECT * FROM `Users` WHERE `Id` = ?;', [Id], function (err, row) {
    a = row;
});
//execute stuff

这将完成将值放入下一个作用域,但在设置 a 之前,//execute stuff 已经发生了。这是因为(我假设)node-mysql 是异步的。

【讨论】:

  • 您的假设和一般答案都是正确的。 OP 可能会发现我回答的 this Q&A 很有帮助。它提供了两种异步使用 mysql 的方法(回调和承诺)。
  • 感谢您的保证,我没有深入研究使用回调,因为 OP 严格希望在通话后使用 a,但感谢您的链接。
  • 完全理解。我的怀疑是他很可能对节点有点陌生,并且可能没有意识到他可能需要在回调中做他想做的事情(出于您确定的原因),或者想出一种不同的方法来推迟执行直到获得他的数据想要可用。
猜你喜欢
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 2022-08-05
相关资源
最近更新 更多