Есть ли способ отправить ответ с подтверждением в функциях AWS Lambda

#javascript #amazon-web-services #aws-lambda #slack #slack-api

#javascript #amazon-веб-сервисы #aws-lambda #слабина #slack-api

Вопрос:

Я пытаюсь обработать модальную отправку в slack, но между ними есть некоторые операции с базой данных, которые занимают несколько секунд времени, из-за этой задержки я получаю: We had some trouble connecting error when submitting slack dialog (Slack API)

Я знаю, что в node.js мы можем сделать что-то вроде этого:

 app.post('/', async (req, res){
   res.status(200).send({text: 'Acknowledgement received !'});
   
   // handle other task
   return res.json({done: 'Yipee !'})
})
 

Но в AWS Lambda-функции я понятия не имею, как я буду обрабатывать этот ответ подтверждения за 3 секунды.

 module.exports.events = async (event, context, callback) => {
  ??? -> How to handle acknowledgement here, it must be handled at top.

  // handle task
  return {
    statusCode: 200,
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({text: 'Done !'})
  } 
}
 

Ответ №1:

Если все, что вы хотите сделать, это получить уведомление об успешном вызове, а затем заставить lambda продолжать выполнять свои собственные действия, вы можете вызвать lambda асинхронно, установив для параметра InvocationType значение Event . https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestSyntax

Ответ №2:

API Slack может быть сложно обрабатывать с бессерверной архитектурой, поскольку большинству бессерверных реализаций нравится, когда ответ является последним, что они делают, а не первым. Один из подходов состоял бы в том, чтобы обернуть любое требуемое поведение в обещание и разрешить это обещание только после того, как вы справитесь с задачей. Смотрите здесь пример этого.