«UnhandledPromiseRejectionWarning» в nodejs даже после добавления блока catch - PullRequest
0 голосов
/ 24 января 2019

Я пишу api-сервер для базы данных postgres и тестировал некоторые стрессовые ситуации. Я использую пул из модуля node-postgres и столкнулся с этой проблемой.

Сначала я исчерпал все соединения postgers перед запуском сервера. Затем я пытаюсь выполнить запрос через пул.

Я попытался добавить блоки try try вокруг обещания. внутри обещания (внутри блока catch) ничего не помогло.

Ниже приведен тестовый код, с которым я воспроизвел ошибку.

var pg = require('./node_modules/pg')

var pool = new pg.Pool(
    {
        user: "test",
        password: "pass134",
        host: "localhost",
        database: "testdb",
        port: 5432,
        max: 32,
        min: 16,
        idleTimeoutMillis: 60000,
        connectionTimeoutMillis: 10000
    }
);

pool.on("error", function(err){

    console.log("Error1: " + String(err));

});

pool.query("SELECT COUNT(*) FROM acal_cust", [])
.then(function(err, results){

    console.log(err);
    console.log(results);

}).catch(function(err){

    console.log("Error2:" + String(err));

    pool.end();

});

Это то, что я получаю, когда запускаю код.

Error2: error: sorry, too many clients already
(node:10422) UnhandledPromiseRejectionWarning: error: sorry, too many clients already
    at Connection.parseE (/ext/node_modules/pg/lib/connection.js:554:11)
    at Connection.parseMessage (/ext/node_modules/pg/lib/connection.js:381:17)
    at Socket.<anonymous> (/ext/node_modules/pg/lib/connection.js:117:22)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    at Socket.Readable.push (_stream_readable.js:208:10)
    at TCP.onread (net.js:597:20)
(node:10422) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:10422) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Я хотел бы знать, как правильно обработать ошибку. Так что это не брошено.

1 Ответ

0 голосов
/ 24 января 2019

поймать Undled отклонений

process.on('unhandledRejection', error => {
  // Will print "unhandledRejection err is not defined"
  console.log('unhandledRejection', error.message);
});

блок catch предназначен для обещаний, а не для версии обратного вызова асинхронного кода.поэтому, если будет выдана какая-либо ошибка, она будет обнаружена, если (err) {// делать что-либо} или

pool.query("SELECT COUNT(*) FROM acal_cust", []).then((results) => {

    console.log(results);

}).catch(function(err){

    console.log("Error:" + String(err));

});
, а также закройте пул при выполнении запроса или любой ошибки.
...