Я пытаюсь использовать библиотеку nodejs-8.12, созданную lob.com, в функции AWS Lambda. Код выглядит так:
'use strict';
module.exports.handler = async (event, context) => {
var imagine all the variable defined here
console.log(front)
console.log(r)
// Create the address
Lob.addresses.create({
name: r.name,
email: '',
phone: '',
address_line1: r.address1,
address_line2: r.address2 || "",
address_city: r.city,
address_state: r.state,
address_zip: r.zipcode,
address_country: r.country
}, function (err, address) {
console.log(address)
if (err) {
console.log(err);
} else {
Lob.postcards.create({
description: '',
to: address.id,
front: front,
back: back,
}, function (err, postcard) {
var card = postcard
if (err) {
console.log(err);
} else {
console.log('The Lob API responded with this postcard object: ', postcard)
}
});
}
});
return {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
}),
};
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// return { message: 'Go Serverless v1.0! Your function executed successfully!', event };
};
Теперь я запустил функцию lamda, и я смог увидеть запись в журнал, прежде чем запустить приведенный выше код, который всегда выполнялся. Но ни один из консольных журналов в приведенном выше коде не выполнялся до выключения лямбды.
Теперь я понимаю, что функция не ждет ни одного из обратных вызовов. Я где-то читал, что вам нужно использовать invoke
при вызове асинхронных функций, но я не уверен, как бы я это сделал при использовании внешних библиотек, которые сами управляют запросами. Есть ли способ заставить функцию ждать, пока все это закончится?