Итак, я возился с Koa.js и генераторами, просто собрал простой сайт для демонстрационных целей. Я использую sqlite с node-sqlite3
и Q для обещаний. Вот мой дб код:Запрос Koa.js с обещаниями висит
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 к «promisify» вызов к базе данных. Тогда, в моем коа пути, у меня есть это:
app.get('/logs', function *(){
var logs = yield db.getLogs();
yield this.render('logs', {logs: logs});
});
Проблема у меня в том, что запрос просто висит, браузер никогда не получает ответа. Что действительно странно, так это если я ставлю инструкцию console.log после yield db.getLogs()
, я вижу, что результаты из db просто прекрасны. Представление есть, все кажется, что он должен работать, но этого просто нет. Любая помощь мне очень понравилась!
Я предполагаю, что вам не нужна вторая «доходность». –
@torazaburo Спасибо, что посмотрели. Оказалось, что это странная проблема, см. Мой ответ на вопрос. – BFree
Просто из любопытства вы можете поделиться тем, как вы обедаете вызов db с помощью Q и с местными обещаниями? –