Почему мне нужно использовать async / await дважды в node-postgres - PullRequest
0 голосов
/ 22 сентября 2018

Я написал этот код, который, кажется, работает:

database.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.

Однако я не понимаю, зачем мне нужен async/await на auth_facade::findPersonByEmail и auth_controller::signin?

Почему, если я удаляю асинхронную подпись auth_controller::signin и await внутри нее, я больше не получаю 0123, а вместо нее 0132?Разве это не должно быть заблокировано в любом случае? auth_facade?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Причина, по которой вам нужно await в двух местах, AuthFacade и AuthController, заключается в том, что вы имеете дело с двумя разными обещаниями:

  1. one в findPersonByEmail() (из запроса к БД)
  2. один из findPersonByEmail().

Показано:

findPersonByEmail(email: string): Promise<Person>;

//same difference
let person = await authFacade.findPersonByEmail(req.body.email);

//same difference
authFacade.findPersonByEmail(req.body.email).then(person => {
});

Если вы хотите узнать больше, прочитайте: Включено и работает с асинхронным JavaScript .

0 голосов
/ 22 сентября 2018

Ваш текущий код:

Семья идет в торговый центр.(0) Папа устал и говорит: «Пойдем по магазинам, я подожду, тогда мы все вместе пойдем домой».(1) Чуть позже дочь говорит: «Мне не хочется идти в этот магазин, я просто побуду здесь и буду ждать тебя, а потом мы вернемся к папе».(2) Мама заканчивает покупки и возвращается к дочери, (3) они оба возвращаются, чтобы забрать папу, и все идут домой вместе.

Ваш код без внешнего await:

Aсемья идет в торговый центр.(0) Папа устал и говорит: «Пойдем по магазинам, я буду здесь».(1) Чуть позже дочь говорит: «Мне не хочется идти в этот магазин, я просто побуду здесь и буду ждать тебя, а потом мы вернемся к папе».Тем не менее, примерно в то же время, (3) папа оборачивается и решает пойти домой, потому что ожидание - это проигравшие.(2) Мама заканчивает покупки и возвращается к дочери, они оба возвращаются и обнаруживают, что папа уехал с машиной, и они застряли в торговом центре с кучей сумок.

И дочери, и папе нужноподождите, чтобы они не оставили кого-то позади.

...