【发布时间】:2019-10-31 07:55:24
【问题描述】:
我正在尝试创建一个异步 lambda 函数,它使 http Get 调用无法正常工作,我相信它与异步有关。如果我删除 await/async 并使其同步,我的功能将正常工作。我不确定我做错了什么。感谢您的帮助!
exports.handler = async function (event, context) {
await setBattery();
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
async 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',
}
};
const req = https.request(options, res => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', d => {
process.stdout.write(d);
});
});
req.on('error', error => {
console.error(error);
});
req.end();
}
【问题讨论】:
-
你还没有将
setBattery的逻辑包装在一个承诺中。 -
好的。我以前没有使用过承诺。
-
async/await 是使用 Promise 的工具,要理解 async/await 你需要理解 Promise。此外,将 async 添加到函数定义会将该函数的返回类型更改为 Promise,因此您需要处理该 Promise。类似
exports.handler(a, b).then(() => {}).catch(() => {}).finally(() => {}) -
"如果我删除 await/async 并使其同步,我的功能可以正常工作。"为什么你希望它是异步的?
-
我正在尝试向我们的 Alexa 智能家居技能 lambda 函数和大部分代码异步添加 http get 调用。
标签: javascript node.js async-await aws-lambda async.js