我要执行的操作是触发lambda作为背景运行有限的时间(少于有限的lambda超时)。我使用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);
});
});
}