Лямбда-узлы - (узел: 1) UnhandledPromiseRejectionWarning: # <Object> - PullRequest
0 голосов
/ 22 октября 2018
exports.handler = async (event, context, callback) => {      
      try {

        const { headers, body } = event;

        //This is where I forgot the "await" keyword

        const input = ValidateInput(body); //Returns Promise

        callback(null, true);

      }catch(err){
        console.log(err);
        callback(null, false);
      }
}

При вызове функции, которая возвращает обещание, и забыв создать вызов функции обещания выражения await, и эта функция отклоняет обещание, Lambda регистрирует эту ошибку в cloudwatch

(node:1) UnhandledPromiseRejectionWarning: #<Object>

Исправление:просто, не забудьте выражение ожидания

const input = await ValidateInput(body); //Return Promise

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Как уже упоминалось, решение состоит в том, чтобы гарантировать, что вы ждете обещания:

const input = await ValidateInput(body);

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

Поскольку Promises могут храниться в переменных и объединяться в цепочку в любой точке, у библиотеки нет возможности узнать, будет ли цепочка Promise иметь .catch, связанный с ней, в будущем.Поэтому многие библиотеки по умолчанию ведут запись в консоль, если отклоненное обещание не было обработано в течение нескольких проходов цикла событий;вот почему вы видите это в журнале.

Обычно вы должны воспринимать это предупреждение как подразумевающее, что вы не ожидали чего-то, что вам следует иметь.Как и на самом деле, редко можно увидеть это нарочно.

0 голосов
/ 28 августа 2019

В документе AWS прямо сказано, что вы не используете callback с асинхронной функцией.

Третий аргумент, обратный вызов, - это функция, которую вы можете вызывать в неасинхронных функциях для отправки.ответ.Функция обратного вызова принимает два аргумента: Ошибка и ответ.Объект ответа должен быть совместим с JSON.stringify.

Для асинхронных функций вы возвращаете ответ, ошибку или обещание среде выполнения вместо использования обратного вызова.

Итак, выможет захотеть исправить это в вашей лямбда-функции.

Смотрите здесь: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html#nodejs-prog-model-handler-callback

0 голосов
/ 22 октября 2018

Исправление простое, не забудьте выражение await

const input = await ValidateInput(body); //Return Promise
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...