Я использую mail-verify для проверки адреса электронной почты, и функция Lambda возвращает, а не ждет результата обещания на
email.check (). Затем (результаты => {* * 1 006
И прыгает прямо на
console.log ('проблема с обратным вызовом');
и возвращается. Я ожидаю, что проверка электронной почты завершится и вернет объект результатов внутри обратного вызова. Вместо этого функция возвращается до разрешения обещания. Любые указатели будут оценены.
Пример функции:
const MailConfirm = require('mail-confirm');
const isemail = require('isemail');
module.exports.app = async (event, context) => {
let request = JSON.parse(event.body)
if(request.email){
var emailToValidate = request.email
if(isemail.validate(emailToValidate)){
console.log(`${emailToValidate} - stage 1 pass`);
const email = new MailConfirm({
emailAddress: emailToValidate,
timeout: 2000,
invalidMailboxKeywords: ['noreply', 'noemail']
});
//Promise issue
email.check().then(results=>{
console.log(results);
return {
statusCode: 200,
body: JSON.stringify({
validatedEmail: emailToValidate,
isValid: true,
}),
};
}).catch(err=>{
console.log(`${emailToValidate} stage 2/3 failed`)
return {
statusCode: 200,
body: JSON.stringify({
validatedEmail: emailToValidate,
isValid: false,
message: err,
}),
};
});
//Returns here
console.log('callback issue');
}else{
return {
statusCode: 200,
body: JSON.stringify({
validatedEmail: emailToValidate,
isValid: false,
message: 'Failed stage 1 validation',
}),
};
}
}
// return {
// statusCode: 500,
// body: JSON.stringify({
// message: 'Something went wrong.',
// }),
// };
};
EDIT:
Спасибо всем за ваши ответы. Я реализовал await, и он хорошо работает при тестировании
test@gmail.com
. Однако, если я проверю
test@email.com
функция email.check()
не возвращается, и моя лямбда-функция возвращается с пустым ответом (502 для шлюза API). Я не уверен, что происходит после let results = await email.check();
при проверке test@email.com
. У моей функции Lambada нет времени ожидания.
try{
let results = await email.check();
console.log(results);
//Returns ok on test@gmail.com
return {
statusCode: 200,
body: JSON.stringify({
validatedEmail: emailToValidate,
isValid: true,
}),
};
} catch(err){
console.log(`${emailToValidate} stage 2/3 failed`)
return {
statusCode: 200,
body: JSON.stringify({
validatedEmail: emailToValidate,
isValid: false,
message: err,
}),
};
}
Лямбда бревна
START Version: $LATEST
test@email.com - stage 1 pass
END
REPORT Duration: 647.88 ms Billed Duration: 700 ms Memory Size: 128 MB Max Memory Used: 21 MB
API-шлюз 502 Bad Gateway (из-за того, что ответ функции Lambda равен нулю)
{
"message": "Internal server error"
}
РЕДАКТИРОВАТЬ 2:
Оказывается, я получаю ошибку 554 в mail-confirm
при проверке test@email.com
.