Я хочу создать функцию, которая вызывает API (стороннюю сторону) и сразу же возвращается, но ожидает ответа API.Функция Lambda не возвращается, пока не завершится запрос async
Вот пример кода:
var request = require('request');
// When I call functionOne it should trigger functionTwo and should end immediately,
// but unfortunately, it is waiting for functionTwo to end
module.exports.functionOne = (event, context, cb) => {
const uri = 'https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/functionTwo';
request.post({ uri: uri });
cb(null, "done functionOne");
};
module.exports.functionTwo = (event, context, cb) => {
console.log("i'm functionTwo");
setTimeout(function() {
console.log("I'm functionTwo about to end");
context.succeed("done functionTwo");
}, 5000);
};
Кроме того, если я пытаюсь вызвать context.succeed()
вместо cb()
, даже предотвратить вызов API и возврата функции сразу без вызова API.
Я также создал проблему на GitHub.
Дополнительная информация:
- Serverless Framework: v1.0.0- РК-2
- Узел: v6.9.1
- ОС: Win 10
FunctionTwo здесь, например, на самом деле есть api, который является третьим лицом, и я отправляю почтовый запрос на этот api с некоторыми данными, и на самом деле это slack api –
Хорошо, поэтому я предлагаю вам создайте другой вопрос, специфичный для API Slack. Если это была другая функция лямбда, вы можете использовать SNS, потому что она возвращается всего за несколько миллисекунд. Если Slack занимает несколько секунд, я не знаю, предоставляют ли они другой способ очереди запроса без необходимости ждать. – Zanon
В противном случае вы можете прервать запрос, чтобы заставить Лямбду остановиться раньше, но, как я уже сказал, вам нужно подождать несколько минут, прежде чем Slack получит запрос. – Zanon