javascript - 为什么我需要在node-postgres中使用async/await两次

标签 javascript node.js async-await es6-promise node-postgres

我编写的这段代码似乎有效:

数据库.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::findPersonByEmailauth_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/

相关文章:

javascript - node.js 等待可变长度数组类型的事件

javascript - Polymer - 根据选定的铁页更改纸张工具栏内容

javascript - 无法获取第二行->第一列值

javascript - 形成多行插入的数组格式nodejs-mysql

c# - 是.GetAwaiter().GetResult();一般用途安全吗?

javascript - RxJS:每隔x秒进行一次

Javascript 将一个数组对象分配给另一个数组

javascript - 将逻辑导出为ex​​press.js 中的函数

node.js - 嵌套异步函数变量范围

kotlin - 如何在Kotlin中返回等待的值?