Как использовать AWS Lambda для запуска в качестве фоновой задачи в течение ограниченного времени? - PullRequest
1 голос
/ 09 ноября 2019

То, что я пытаюсь сделать, - это запустить лямбду в качестве фона в течение ограниченного времени (меньше, чем ограниченное время ожидания лямбда). Я использую 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);
    });
  });
}
...