Запрос Koa.js с промисами висит

Так что я возился с Koa.js и генераторами, просто собрал простой сайт для демонстрационных целей. Я использую sqlite с node-sqlite3 и 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, чтобы «обещать» вызов базе данных. Затем, в моем маршруте коа, у меня есть это:

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

У меня проблема в том, что запрос просто зависает, браузер никогда не получает ответа. Что действительно странно, так это то, что если я поставлю оператор console.log после yield db.getLogs(), я прекрасно увижу результаты из базы данных. Вид есть, вроде все должно работать, но просто не работает. Любая помощь будет мне очень признательна!


person BFree    schedule 23.12.2014    source источник
comment
Я предполагаю, что вам не нужен второй yield.   -  person    schedule 23.12.2014
comment
@torazaburo Спасибо за внимание. Оказалось, что это странная проблема, см. Мой ответ на вопрос.   -  person BFree    schedule 23.12.2014
comment
Просто из любопытства, можете ли вы поделиться тем, как вы промисифицируете вызов db с помощью Q и с нативными промисами?   -  person    schedule 23.12.2014


Ответы (1)


Хорошо, после долгих разочарований оказалось, что когда я пробовал Q или bluebird, у меня была эта проблема. Как только я переключился на родные промисы, все заработало без проблем. Мне придется еще немного покопаться, чтобы понять, что, черт возьми, происходит, но я оставлю это здесь на случай, если кто-нибудь столкнется с этим в будущем. Также, если кому интересно, я работал с узлом 0.11.13 и версией q: 1.1.2

person BFree    schedule 23.12.2014