В соответствии с MDN Web Docs:
Объявление асинхронной функции определяет асинхронную функцию, которая возвращает объект AsyncFunction. Асинхронная функция - это функция, которая работает асинхронно через цикл обработки событий, используя неявное обещание для возврата своего результата . Но синтаксис и структура вашего кода с использованием асинхронных функций намного больше похожи на использование стандартных синхронных функций.
Итак, вам нужно вернуть объект Promise
, чтобы его обрабатывал async function
(Вы также можете использовать другое обещание для его обработки), я преобразовал setBattery
в обычную функцию, и возвращение этой функции теперь является обещанием, которое будет обрабатываться вашим обработчиком (exports.handler
). Я не проверял код, но он должен работать.
exports.handler = async function (event, context) {
await setBattery();
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
function setBattery() {
'use strict';
const https = require('https');
const options = {
hostname: 'testsite.com',
port: 443,
path: '/proxy/api/setting?EM_OperatingMode=1',
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
};
// Return it as a Promise
return new Promise((resolve, reject) => {
const req = https.request(options, res => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', d => {
process.stdout.write(d);
// If successful
resolve(d);
});
});
req.on('error', error => {
console.error(error);
// If failed
reject(error);
});
req.end();
});
}