【发布时间】:2018-10-17 06:32:43
【问题描述】:
我试图在我的代码中使用更少的回调,所以我认为在使用 async/await 的解决方案中,但这不起作用,在查询完成之前快速发送渲染视图。
查询的结果很好,但是在渲染之后。
节点-v = 8.9.1
控制器代码:
app.get('/admin', ensureLoggedIn('/login'), (req, res, next) => {
app.infra.connectionFactory(async (err, connection) => {
const blogDAO = new app.infra.BlogDAO(connection);
const emailCount = await blogDAO.countLeads((errDAO, results) => {
if (errDAO) {
return next(errDAO);
}
return results[0].leads;
});
const userDAO = new app.infra.UserDAO(connection);
const subCount = await userDAO.countUsers((errDAO, results) => {
if (errDAO) {
return next(errDAO);
}
return results[0].users;
});
const postCount = 3;
res.render('admin/index', { emailCount, subCount, postCount });
});
});
DAO 代码:
UserDAO.prototype.countUsers = function countUsers(callback) {
this.connection.query('SELECT COUNT(token) AS users FROM users', callback);
};
【问题讨论】:
-
您是否意识到
await仅适用于返回承诺以及该承诺与异步操作完成时间相关联的函数?您在一个接受回调但不返回承诺的函数上使用await blogDAO.countLeads(...)。它不会await任何东西。事实上,countUsers()根本没有返回值,所以await无事可做。您需要阅读更多关于await实际工作和正确使用的信息。 -
问题:
await能使异步代码同步吗?,回答:什么都没有可以使异步代码同步
标签: javascript node.js express async-await