gpt4 book ai didi

Node.js Lambda 异步返回未定义

转载 作者:太空宇宙 更新时间:2023-11-04 00:02:30 24 4
gpt4 key购买 nike

简单调用 ec2 描述安全组并返回安全组 ID。使用异步/等待,但在记录返回值时,我得到了未定义。我完全承认我来自 Python,并且我已经尽最大努力让我的大脑围绕异步调用进行思考。我以为我已经把它钉牢了,但我显然错过了一些东西。

'use strict';

// Load Modules
const AWS = require('aws-sdk')

//Set the region
AWS.config.update({region: 'us-west-2'});

// Call AWS Resources
const ec2 = new AWS.EC2();

// Get Security Group ID From Event
const getSgIdFromEvent = async (event) => {
var ec2params = { Filters: [{Name: 'tag:t_whitelist',Values[event['site']]}]};
await ec2.describeSecurityGroups(ec2params, function (err, response) {
if (err) {return console.error(err.message)}
else {
var sgId = response.SecurityGroups[0].GroupId;
return sgId;
};
});
};
// MAIN FUNCTION
exports.handler = (event, context) => {
getSgIdFromEvent(event)
.then(sgId => {console.log(sgId)});
}

“sgId”应返回安全组 ID。在返回之前,它确实在原始函数中打印得很好。

最佳答案

通常,如果它是一个异步调用,您希望以类似的方式处理它,而不使用回调

// Load Modules
const AWS = require('aws-sdk')

//Set the region
AWS.config.update({ region: 'us-west-2' });

// Call AWS Resources
const ec2 = new AWS.EC2();

// Get Security Group ID From Event
const getSgIdFromEvent = async (event) => {
var ec2params = { Filters: [{ Name: 'tag:t_whitelist', Values[event['site']]}] };
try {
const securityGroupsDesc = await ec2.describeSecurityGroups(ec2params).promise();
const sgId = securityGroupsDesc.SecurityGroups[0].GroupId;
//do something with the returned result
return sgId;
}
catch (error) {
console.log('handle error');
// throw error;
}
});
};
// MAIN FUNCTION
exports.handler = (event, context) => {
getSgIdFromEvent(event)
.then(sgId => { console.log(sgId) });
}

但是,如果它不支持异步,您只需使用回调来处理返回的数据或错误,而不使用异步函数。但是,阅读 AWS 文档,您可以发现函数 ec2.describeSecurityGroups() 返回 AWS Request其中有一个方法 promise()需要调用它来发送请求并获取返回的 promise 。请注意,这里的 try catch 不是必需的,但最好有它以防过程中发生错误。

关于Node.js Lambda 异步返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53992221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com