
[英]trouble using node.js w/ node-fetch module in async AWS Lambda Function
[英]Lambda Function using Node.Js
我正在尝试使用 lambda function 列出特定区域中的所有 EC2 实例。 这是我的代码:
const AWS = require('aws-sdk');
AWS.config.region = '******';
exports.handler = async function(event) {
const promise = new Promise(function(resolve, reject) {
const ec2 = new AWS.EC2();
ec2.describeInstances( function(err, data) {
console.log("\nIn describe instances:\n");
if (err) console.log(err, err.stack); // an error occurred
else console.log("\n\n" + data + "\n\n"); // successful response
context.done(null, 'Function Finished!');
})
resolve("Data");
})
return promise;
}
我得到 Execution result: succeeded 但并没有真正返回任何实例。
const AWS = require('aws-sdk');
AWS.config.region = '******';
exports.handler = async function(event) {
const promise = new Promise(function(resolve, reject) {
const ec2 = new AWS.EC2();
ec2.describeInstances(function(err, data) {
console.log("\nIn describe instances:\n");
if (err) {
console.log(err, err.stack); // an error occurred
reject(err);
} else {
console.log("\n\n" + data + "\n\n"); // successful response
resolve(data);
}
})
});
return promise;
}
所以这里我们有一个 promise,如果描述实例成功,它将用数据解决,如果描述实例失败,则会用错误拒绝。
请注意,我们将data
变量传递给resovle
而不仅仅是“Data”字符串,这在以前没有任何意义。
另外,请记住,使用此代码,您的 lambda function 将从describeInstances
响应返回原始 output。 如果您需要过滤某些数据或添加其他逻辑,您需要在resolve
之前执行此操作并将结果传递给resolve
,或者await
promise 的结果,对数据执行任何您需要的操作并返回结果。
TL/DR:尝试在回调中解决您的 promise。
也许与回调和承诺有一些混淆。
describeInstances
方法获取一个正在调用的回调,但您不知道何时会调用。 所以可能发生的是你调用 describeInstances (它不会阻塞),然后你的 promise 立即解决。 之后,您的 AWS 回调会在某个时间点被调用。 我想这不是你想要的?async
关键字,因为你返回 promise (你没有在等待任何东西。另外,也许看看这里: https://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_original
const AWS = require("aws-sdk");
const ec2 = new AWS.EC2({ region: "your_region" });
exports.handler = async function (event) {
try {
let response = await ec2.describeInstances().promise();
return response;
} catch (error) {
return error;
}
};
上面的代码很好地适用于用例,不需要处理 promise 和回调好先生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.