Я использую 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?