То, что я пытаюсь сделать, - это запустить лямбду в качестве фона в течение ограниченного времени (меньше, чем ограниченное время ожидания лямбда). Я использую setInterval и setTimeout, но они не работают должным образом с async / await. Обратите внимание, что код работает, если работает локально как приложение узла. У меня есть мой код, как показано ниже:
const mqtt = require('async-mqtt');
module.exports.startPolling = function(event, context, callback) {
context.callbackWaitsForEmptyEventLoop = false
let runInterval = setInterval( async() => {
await run("tram", "#");
}, 1000);
setTimeout(() => { clearInterval(runInterval)}, 5000);
}
const run = async(mode, route) => {
console.log("Starting");
try {
client = await mqtt.connectAsync('mqtts://mqtt.hsl.fi:8883/');
await client.subscribe(`/hfp/v2/journey/+/vp/${mode}/${route}`);
response = await getMessageAsync(client, "message");
console.log(response.toString());
await client.end();
console.log("Done");
} catch (e){
console.log(e.stack);
process.exit();
}
}
const getMessageAsync = (client, ...args) => {
return new Promise((resolve, reject) => {
client.on(...args, (topic, message) => {
resolve(message);
});
});
}