我编写的这段代码似乎有效:
数据库.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
签名中删除 async 以及其中的 await
,我就不再得到 0123,而是得到 0132?无论如何,它不应该被阻塞在 auth_facade
中等待吗?
最佳答案
您当前的代码:
一家人去商场。 (0) 爸爸累了,说:“去买点东西吧,我等一下,然后我们一起回家。” (1) 过了一会儿,女儿说:“我不想去那家店,我就在这里闲逛,等你,然后我们就回到爸爸身边。” (2)妈妈买完东西回到女儿身边,(3)她们一起回来接爸爸,一起回家。
没有外部 await
的代码:
一家人去商场。 (0) 爸爸累了,说:“去买点东西吧,我会在这里。” (1) 过了一会儿,女儿说:“我不想去那家店,我就在这里闲逛,等你,然后我们就回到爸爸身边。”然而,大约在同一时间,(3)爸爸转身决定回家,因为等待是为失败者准备的。 (2) 妈妈买完东西回到女儿身边,两人回来后发现爸爸已经开车走了,她们提着一堆购物袋被困在商场里。
女儿和爸爸都需要等待,以免留下任何人。
关于javascript - 为什么我需要在node-postgres中使用async/await两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52452804/