асинхронный / ожидание |Иногда мой код ловит ошибки, иногда нет - PullRequest
0 голосов
/ 23 сентября 2019

Я использую AWS Lambda с Node.js 10.x и пишу свою функцию, используя async / await.Проблема в том, что иногда мой код ловит ошибки, а иногда нет (я полагаю, он не ждет обещаний).

Мой код выглядит так:

'use strict';

const util = require('util');
const mysql = require('mysql');

const responder = require('./responder.js');

const dbConn = mysql.createPool({
  connectionLimit : 10,
  host            : process.env.RDS_HOSTNAME,
  user            : process.env.RDS_USERNAME,
  password        : process.env.RDS_PASSWORD,
  port            : process.env.RDS_PORT,
  database        : process.env.RDS_DATABASE
});

const query = util.promisify(dbConn.query).bind(dbConn);

exports.handler = async (event, context) => {
  try {
    context.callbackWaitsForEmptyEventLoop = false;

    // SAMPLE CODE START
    if (event.httpMethod === 'GET') {

      let arrTextsPromise = textTranslations();
      let arrListsPromise = listNames();

      arrTexts = await arrTextsPromise;
      arrLists = await arrListsPromise;

      return responder.success(arrTexts);
    }
    // SAMPLE CODE END

  } catch (err) {
    return responder.error(err.message);
  }
}

// SAMPLE FUNCTIONS START
async function textTranslations() {
  try {
    let results = [];

    const sql = `SELECT name, text_en FROM texts`;
    const rows = await query(sql);

    for (let key in rows) {
      results[rows[key]['name']] = rows[key]['text_en'];
    }

    return results;

  } catch (err) {
    console.error(err);
    throw err;
  }
}

async function listNames() {
  try {
    let results = [];

    const sql = `SELECT table_name FROM information_schema.tables WHERE table_name LIKE 'list_%'`;
    const rows = await query(sql);

    for (let i = 0; i < rows.length; i++) {
      results.push(rows[i]['table_name'].substr(5));
    }

    return results;

  } catch (err) {
    console.error(err);
    throw err;
  }
}
// SAMPLE FUNCTIONS END

Все отлично работает, нодавайте предположим, что я установил неправильное имя пользователя для моей базы данных MySQL.Иногда мой код генерирует ожидаемые действия из моей функции «catch», а иногда это приводит к внутренней ошибке сервера / UnhandledPromiseRejection.

Мой код работает нормально и почти все ошибки перехватывает, но, как я вижу,одна и та же ошибка иногда обнаруживается, а иногда не заставляет меня думать, что что-то не так.

Я что-то упускаю, чтобы можно было перехватить все эти ошибки / обещания с помощью async / await?

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