Блокировка try / catch и исключение необработанного обещания - PullRequest
0 голосов
/ 04 июля 2018

Я хотел проверить мою асинхронную функцию, запрашивая таблицу, которая не существует. Поэтому ошибка генерируется специально.

async function getPosts() {
  try {
    const connection = await dbConnection()
    const result = await connection.query('SELECT * FROM x')
    await connection.release()
    console.log(result)
  }
  catch(ex) {
     throw new Error(ex)
  } 
}

Когда я вызываю эту функцию:

UnhandledPromiseRejectionWarning: Ошибка: Ошибка: ER_NO_SUCH_TABLE: таблица 'test.x' не существует.

Можете ли вы сказать мне, почему?

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Привет, я из прошлого!

Ваша консоль отображает необработанную ошибку, потому что в вашем блоке catch вы (я был) тупо повторно выдает ошибку JavaScript. ?

Просто удалите это throw new Error(ex) из вашего catch и измените его с некоторой логикой обработки ошибок.

0 голосов
/ 04 июля 2018

Вы получаете UnhandledPromiseRejectionWarning, потому что вы не добавляете обработчик .catch к getPosts()


getPosts()
  .then(console.log)
  .catch(console.error); // You're missing this

Или используя async/await

try {
    const posts = await getPosts();
    console.log(posts);
} catch(e) { // Missing this
    console.error(e); 
}

Нет необходимости добавлять try/catch в функцию getPosts, если вы собираетесь снова выдать ошибку без каких-либо изменений. Просто дайте ему всплыть и обработайте ошибку при вызове getPosts(), как показано выше.

async function getPosts() {

    const connection = await dbConnection()
    const result = await connection.query('SELECT * FROM x')
    await connection.release()
    return result;
}

Что касается вашей текущей ошибки, вы пытаетесь выполнить запрос к несуществующей таблице.

Подробнее об этом вы можете узнать в следующем вопросе: Что такое необработанный отказ от обещания?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...