Почему моя лямбда тратит ровно 6 секунд каждый раз, чтобы ответить? - PullRequest
0 голосов
/ 28 апреля 2020

Я использую NodeJS env с безсерверной структурой.

Услуга является конечной точкой для отправки контактной формы. Код выглядит примерно так. У меня есть два вызова asyn c, один пишет в DynamoDB, а другой отправляет электронное письмо через SES.

module.exports.blog = async (event, context, callback) => {
  const data = JSON.parse(event.body);
  const handler = 'AB';
  const sesParams = getSesParams(handler, data);

  if (typeof data.text !== 'string') {
    callback(null, validationErrRes);
    return;
  }

  try {
    await logToDB(handler, data);
  } catch (dbErr) {
    console.error(dbErr);
    callback(null, errRes(dbErr, 'Failed to log to DB'));
    return;
  }

  try {
    await SES.sendEmail(sesParams).promise();
  } catch (emailErr) {
    console.error(emailErr);
    callback(null, errRes(emailErr, 'Failed to send mail'));
    return;
  }

  callback(null, succsessResponse);
  return;
};

Ответ занимает ровно 6se c, когда dbput и sendMail занимают в общей сложности <300 мс , <a href="https://i.stack.imgur.com/KCI66.png" rel="nofollow noreferrer">enter image description here

PS: параллельный запуск обоих асинхронных вызовов c не очень помогает.

1 Ответ

0 голосов
/ 28 апреля 2020

Попробуйте удалить обратный вызов из определения функции и вызов функции обратного вызова. Просто верните successResponse. Вы уже являетесь asyn c функцией, поэтому вам не нужно использовать обратный вызов. Вы также можете просто вернуть ошибку.

module.exports.blog = async (event, context) => {

и

return {
   statusCode: 200
}

и

return validationErrRes
...