Koa.js请求与承诺挂起

时间:2014-12-23 05:56:31

标签: javascript node.js sqlite koa

因此,我正在搞乱Koa.js和发电机,只是为了演示目的而将一个简单的网站整合在一起。我使用带有node-sqlite3的sqlite和带有Q的承诺。这是我的数据库代码:

module.exports.getLogs = function(){
    var deferred = Q.defer();
    var results = [];
    db.serialize(function(){
        db.each("SELECT ipAddress, action, details, timestamp FROM logs", function(err, row) {
            results.push({
                ipAddress: row.ipAddress,
                action: row.action,
                details: row.action,
                timestamp: new Date(row.timestamp)
            });
        }, function(){
            deferred.resolve(results);
        });
    });

    return deferred.promise;
}

所以基本上我只是Q.defer to" promisify"对数据库的调用。然后,在我的koa路线上,我有这个:

app.get('/logs', function *(){
    var logs = yield db.getLogs();
    yield this.render('logs', {logs: logs});
});

我遇到的问题是请求只是挂起,浏览器永远不会得到响应。真正奇怪的是,如果我在yield db.getLogs()之后放入一个console.log语句,我看到db的结果就好了。观点在那里,一切似乎都应该有效,但它根本就没有。我非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

好吧,经过多次挫折后,事实证明,当我尝试Q或蓝鸟时,我遇到了这个问题。一旦我切换到原生的Promises,它就会游泳。我将不得不深入挖掘一下,看看到底发生了什么,但我会把它留在这里以防将来有人遇到这种情况。此外,如果有人好奇,我运行节点0.11.13和q版本:1.1.2