У меня были проблемы с запуском некоторого кода, который я написал, используя AWS Lambda с NodeJS.Мне потребовалось некоторое время, чтобы сузить мою проблему, но в конечном итоге я заметил, что если я вызываю функцию обратного вызова из контекста, отличного от контекста функции-обработчика, то значение ответа равно нулю.
Вот простая функция Iиспользуется для проверки этого
exports.handler = async (event, context, callback) => {
callback (null,{
statusCode: 201,
headers: {
"Content-Type": "text/html"
},
body: {}
});
}
Если я запускаю тестовое событие с этим кодом (тестовый сценарий - пустой JSON), то результат будет просто:
Response:
{
"statusCode": 201,
"headers": {
"Content-Type": "text/html"
},
"body": {}
}
Однако если я только принудительно вызываю функцию обратного вызова в другом контексте, как в примере ниже:
exports.handler = async (event, context, callback) => {
setTimeout(function() {
callback (null,{ // <-- callback is now called in timer context
statusCode: 201,
headers: {
"Content-Type": "text/html"
},
body: {}
})}, 5000);
}
Тогда выполнение точно такого же тестового события (пустой JSON) теперь приводит к нулевому ответу:
Response:
null
Теперь это кажется мне очень простой функциональностью, я просто предполагаю, что здесь что-то упущено.Кто-нибудь может помочь определить мою ошибку?или объясните, как значение ответа может содержать обязательные значения, даже если обратный вызов вызывается в другом контексте?Спасибо!
Обновление # 1 Протестировано еще раз с использованием обещания: