Должен признать, что я новичок в функциях Javascript и asyn c, мой основной опыт - Python, но клиент, над которым я сейчас работаю, попросил меня разработать некоторые функции с использованием Node.js.
Проблема, с которой я сталкиваюсь, заключается в отправке электронного письма с использованием NodeMailer после завершения цепочки запросов Ax ios. Это внутри лямбда-функции на AWS. На моей локальной машине, если я извлекаю код из обработчика и выполняю его, он работает как шарм. На AWS, однако, похоже, что фрагмент кода для отправки электронного письма никогда не достигается.
exports.handler = async (event) => {
email_address = event.queryStringParameters.email_address;
// initialize nodemailer transport
let transporter = nodemailer.createTransport({
service: 'gmail',
port: 8000,
secure: false,
auth: {
user: 'username@gmail.com',
pass: 'PASS',
},
});
await axios({
method: 'GET',
url: 'https://api.a-service.com/accounts?email=' + email_address,
auth: {
username: username,
password: password
}
})
.then(response => {
// MY PIECE OF CODE
return some_values;
})
.then(some_values => {
axios({
method: 'GET',
url: 'https://api.a-service.com/orders/' + some_values,
auth: {
username: username,
password: password
}
})
.then(response => {
// MY PIECE OF CODE
return some_other_values;
})
.then(some_other_values => {
try{
transporter.sendMail({
from: "User",
to: email_address, // list of receivers
subject: "Hello " // Subject line
text: JSON.stringify(some_other_values), // plain text body
html: JSON.stringify(some_other_values), // html body
});
} catch (e) {
console.log(e);
}
});
})
.catch(error => {
errors = error;
})
if (errors){
return makeResponse(400, errors);
} else {
return makeResponse(200, 'Successful');
}
};
Процесс выглядит следующим образом:
- Вызовите / accounts Конечная точка API и получить из нее некоторые данные
- Использовать данные из предыдущего вызова для вызова конечной точки API / orders
- Использовать данные из второго вызова API для отправки электронного письма с помощью NodeMailer
Я почти уверен, что делаю некоторые ошибки с обещаниями, так как обнаружил, что они сильно отличаются от того, как я обычно работаю с кодом syn c.
Спасибо всем за любые подсказки!