【发布时间】:2019-02-26 09:35:08
【问题描述】:
我编写的这段代码似乎可以正常工作:
数据库.js
const {Pool} = require('pg');
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});
module.exports = {
query: (text, params) => pool.query(text, params)
};
auth_facade.js
const database = require('../../utils/database');
module.exports.findPersonByEmail = async function(email) {
const query = 'SELECT * FROM Person WHERE email = $1';
const values = [email];
try {
console.log(1);
const {rows} = await database.query(query, values);
console.log(2);
return rows[0];
} catch (err) {
next(err);
}
};
auth_controller.js
const authFacade = require('./auth_facade');
module.exports.signin = async function(req, res, next) {
console.log(0);
var person = await authFacade.findPersonByEmail(req.body.email);
console.log(3);
};
正如我所料,它显示的是 0123。
但是,我不明白为什么我在 auth_facade::findPersonByEmail 和 auth_controller::signin 上都需要 async/await?
为什么,如果我从 auth_controller::signin 签名和其中的 await 中删除异步,我不再得到 0123,而是 0132? auth_facade中的等待不应该被阻止吗?
【问题讨论】:
-
你的
signin函数中不需要async/await,如果它只是调用authFacade.findPersonByEmail;否则,您“需要”它,因为底层pool.query返回一个承诺(所以它是async)。authFacade.findPersonByEmail是async,所以它没有阻塞。
标签: javascript node.js async-await es6-promise node-postgres