为什么我的Q承诺不起作用?

时间:2015-02-20 05:02:53

标签: node.js q node-mysql

我是承诺和Q的新手,我正在尝试转换query中使用node-mysql的路线。以下是我的代码的摘录:

var Q = require('q');
// connection defined elsewhere

router.get('/', function(req, res) {
    var query = Q.denodeify(connection.query);
    var promise = query("-- query ommitted --", [req.user.id]);
    promise.then(console.log, console.error);
});

我正在尝试将此转换为不使用promises的现有设置,因此我知道连接已正确设置且查询有效。每当我尝试请求此路由时,我都会在stderr中收到相同的消息:

[TypeError: Cannot read property 'connectionConfig' of undefined]

我不知道它来自哪里,所以我不确定如何找到完整的堆栈跟踪。我还尝试了这个代码的替代版本,其中我有自己的函数而不是console.logconsole.error,但是这个函数从未被调用过,并且出现了同样的错误。

1 个答案:

答案 0 :(得分:4)

更新回答:

当您connection查询方法时,您可能会将词汇范围丢失到denodeify

查看Q documentation它说这可能是一个问题:

  

如果您正在使用方法而不是简单的函数,您可以轻松地遇到将方法传递给另一个函数的常见问题,如Q.nfcall - " un-binds"来自其所有者的方法。

要解决此问题,请尝试使用Q.nbind

var query = Q.nbind(connection.query, connection);
var promise = query("-- query ommitted --", [req.user.id]);
promise.then(console.log, console.error);

原始答案:

查看node-mysql源,访问connectionConfig的唯一位置是Pool.js。所以我的猜测是你在如何配置池方面遇到了问题。