javascript - 带 promise 的 Koa.js 请求挂起

标签 javascript node.js sqlite koa

所以我正在摆弄 Koa.js 和生成器,只是出于演示目的拼凑了一个简单的网站。我正在使用 sqlite node-sqlite3 Q 代表 promise 。这是我的数据库代码:

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“ promise ”对数据库的调用。然后,在我的 koa route ,我有这个:

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

我遇到的问题是请求只是挂起,浏览器永远不会得到响应。真正奇怪的是,如果我在 yield db.getLogs() 后面放置一个 console.log 语句,我就可以很好地看到数据库的结果。 View 就在那里,一切似乎都应该有效,但事实并非如此。任何帮助我将不胜感激!

最佳答案

好吧,经过多次挫折后,事实证明,当我尝试 Q 或 bluebird 时,我遇到了这个问题。当我切换到原生 Promise 后,它就运行得很顺利。我将不得不进一步挖掘以弄清楚到底发生了什么,但我将把它留在这里,以防将来有人遇到这个问题。另外,如果有人好奇,我正在使用 Node 0.11.13 和 q 版本运行:1.1.2

关于javascript - 带 promise 的 Koa.js 请求挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27614882/

相关文章:

javascript - 在 Javascript 中迭代另一个数组中的一个数组并在 UL 中显示项目

node.js - 无需 PATH 变量的 Internet Explorer 驱动程序

javascript - 无法永远卸载nodejs

android - SQLite fts3全文搜索中如何写contains查询

javascript - 引用错误 : event is not defined in Firefox

javascript - 我不能调用变量

Javascript:为什么这会产生丑陋的字符串???我想要货币

javascript - AJAX 从(NodeJS + Express)服务器请求 png/jpeg 图像并以 html 显示

mysql - 我应该使用 SQLite 而不是 MySQL 吗?

java - 关于 SQLite android 中的数组