Рассмотрим следующий пример лямбда-функции:
//get-account
exports.handler = (data, context, callback) => {
callback("Account not found");
};
Лямбда выдаст эту ошибку примерно так:
{
"errorMessage": "Account not found"
}
Это именно то, что я хочу.Однако рассмотрите возможность вызова этой функции через AWS API
return new Promise((resolve, reject) => {
Lambda.invoke({
FunctionName: 'get-account',
InvocationType: "RequestResponse",
Payload: JSON.stringify({ account_id: account_id })
}, function(err, data) {
//only true if the invocation failed...
if(err) { return reject(err); }
//parse the payload. We will need it regardless of error/success
let response = JSON.parse(data.Payload);
//did the function throw an error?
if(data.FunctionError) {
//the error message will be [object Object], which is no good!
reject(response.errorMessage);
return;
}
//success!
resolve(response);
});
});
. В этом случае я обнаружил, что ошибка всегда преобразуется в строку [object Object]
.Кажется, что лямбда берет объект ошибки из обратного вызова (объект ошибки, который он создает), а затем оборачивает его в другой объект ошибки.Итак, в конечном итоге Lambda.invoke делает это:
{
errorMessage: {
errorMessage: "Account not found"
}
}
Но вместо того, чтобы возвращать этот построенный объект, он возвращает,
{
errorMessage: '[object Object]'
}
Кто-нибудь видит способ обойти это?Я НЕ хочу изменить то, как моя лямбда-функция выводит ошибки.Я только хочу получить правильную ошибку из функции вызова лямбды.Это просто невозможно из-за того, как Lambda.invoke()
снова включает ошибку?