作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试通过 AWS Lambda 从现有应用程序运行特定功能,使用 JS SDK 从我的 node.js 应用程序调用 Lambda。由于我要覆盖现有函数,因此我必须保留其基本结构,即:
overwrittenFunction = function(params) {
//get some data
return dataArray;
}
..所以我需要得到一个我可以返回的数组,如果我想保留我使用的库的底层结构的话。据我所知,Lambda 调用是异步的,因此不可能做这样的事情:
overwrittenFunction = function(params) {
lambda.invoke(params, callback);
function callback(err,data) {
var dataArray = data;
}
return dataArray;
}
(我也用 promises 和 async/await 尝试过类似的事情)。
afaik 我现在有两个选择:以某种方式找出如何执行同步 Lambda 调用,或修改我的库/现有应用程序(如果可能,我宁愿不这样做)。
有没有办法做这样的事情并以某种方式返回我期望的值?
(我正在使用 Node v8.9.4)
最佳答案
Lambda 和 async/await 有点棘手,但以下对我有用(在生产中):
const lambdaParams = {
FunctionName: 'my-lambda',
// RequestResponse is important here. Without it we won't get the result Payload
InvocationType: 'RequestResponse',
LogType: 'Tail', // other option is 'None'
Payload: {
something: 'anything'
}
};
// Lambda expects the Payload to be stringified JSON
lambdaParams.Payload = JSON.stringify(lambdaParams.Payload);
const lambdaResult = await lambda.invoke(lambdaParams).promise();
logger.debug('Lambda completed, result: ', lambdaResult.Payload);
const resultObject = JSON.parse(lambdaResult.Payload)
在 try/catch 中完成所有操作,然后进城。
关于node.js - 有没有办法从 node.js 同步调用 AWS Lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48305364/
我是一名优秀的程序员,十分优秀!