«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как правильно связать обещания в Node.js при работе с запросами к базе данных?

Как правильно связать обещания в Node.js при работе с запросами к базе данных?

Опубликовано 21 ноября 2024 г.
Просматривать:246

How Can I Chain Promises Correctly in Node.js When Working with Database Queries?

Проблемы с промисами и подключением

В этом коде Node.js ожидается, что промис будет ждать завершения функции findUser, что это не так. Проблема связана с асинхронным выполнением запросов к базе данных.

Функция обратного вызова соединения

В findUser соединение с базой данных устанавливается с помощью Pool.getConnection. Эта функция принимает в качестве аргумента функцию обратного вызова, которая вызывается, когда соединение готово. Однако код неправильно возвращает данные в этом обратном вызове, что приводит к возврату неопределенного значения до завершения запроса.

Чтобы решить эту проблему, функция findUser должна передать обратный вызов в Pool.getConnection, который разрешает или отклоняет обещание, указывает, был ли запрос успешным или нет.

Цепочка промисов

Использование промисов позволяет кодировать выполняться последовательно. В предоставленном коде первое обещание должно быть связано со следующим обещанием, используя then вместо функций обратного вызова, как показано ниже:

promise.then(function(rows) {
    return new Promise(function (resolve, reject) {
        loginC.doSomething(data);

        if (success) {
            resolve(data);
        } else {
            reject(reason);
        }
    });
}, function(reason) {
    console.log("error handler second");
});

Обработка ошибок

Причина вывода сообщения «второй обработчик ошибок» заключается в том, что ошибка возникает при сбое соединения с базой данных. Обработка ошибок в прослушивателе событий Connection.on('error') используется неправильно. Эта ошибка передается функции findUser и фиксируется вторым обработчиком ошибок в цепочке.

Функция findUser должна отклонить обещание с сообщением об ошибке, которое затем будет передано обработчику ошибок в цепочке обещаний. .

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3