#node.js
#node.js
Вопрос:
Я пытаюсь связать серию запросов к базе данных в Node.js используя модуль mysql2.
Прежде всего, я перейду к async / await, но я хочу понять этот метод, прежде чем делать это. Я пытаюсь более подробно разобраться в обещаниях, прежде чем использовать для них то, что, как я понимаю, является синтаксическим сахаром.
Вот мой код:
const pool = mysql.createPool({
host: 'localhost',
user: process.env.MYSQL_USERNAME,
password: process.env.MYSQL_PASSWORD,
database: 'phones'
});
console.log(pool);
pool.getConnection((connection) => {
console.log('entered connection');
connection.promise().query('select * from lists')
.then(([rows, fields]) => {
const lists = rows;
return connection.promise().query('select * from numbers')
}).then(([rows, fields]) => {
const numbers = rows;
return numbers;
}).then(() => {
console.log(lists);
console.log(numbers);
return lists;
}).catch((error) => {
throw error;
}).finally(() => {
connection.end();
});
});
console.log('end');
И вот результат:
PromisePool {
...
}
end
Программа просто ждет там и не завершается, пока я не нажму Ctrl-C. Я понимаю достаточно, чтобы знать, что есть обещание, которое ожидает разрешения, но я не понимаю почему. Разве я не должен хотя бы получить entered connection
журнал? Я не.
Комментарии:
1. если вы используете
then()
цепочку, не забудьте вернуть что-то , чтобы следующему обработчику «then» было с чем работать. Если вы используете функции со стрелками, помните, что возвращаются только функции со стрелками() => 3
(например, возвращает значение 3) — функции со стрелками с функциональным блоком ничего не возвращают , если вы явно не добавите оператор return (например() => { 3; }
, ничего не возвращает, это должно быть() => { return 3; }
для возврата 3)2. @Mike’Pomax’Camermans, что я убираю из этого, так это то, что каждый из
then
вызовов должен что-то возвращать, но я добавил возвращаемые значения к каждому из моихthen
вызовов, и поведение не изменилось. Вызываетсяpool.getConnection
ли вызываемый? Если да, то почему первая строка в нем не выводится в журнал?3. ваш код не показывает возвратов.
4. @Mike’Pomax’Camermans я добавил их в свой файл. Но это ничего не меняет. Теперь я добавил их в приведенный выше пример кода. Результат остается тем же, и выполнение не завершается.
5. можете ли вы добавить сюда await — «const pool = await mysql.createPool({ » и проверить, вызывается ли pool.getConnection или нет. Также добавьте поле ошибки в функцию обратного вызова pool.getConnection и проверьте, есть ли какая-либо ошибка или нет.