node.js - 有没有办法从 node.js 同步调用 AWS Lambda?

标签 node.js amazon-web-services asynchronous aws-lambda aws-sdk-js

我正在尝试通过 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/

相关文章:

amazon-web-services - Elastic Beanstalk (EB) 默认地址/URL 上的 HTTPS(无自定义域名)

amazon-web-services - 如何允许未经身份验证的用户(猜测)访问 aws appsync?

node.js - 测试 REST API 并使用 EJS 渲染

html - 连接到笔记本电脑上的本地主机服务器时,HTML按钮在移动设备上不起作用

node.js - Mongoose:对 $skip 和 $limit 之后的所有字段数求和

c++ - Googletest:如何异步运行测试?

javascript - 订阅后对象内的数组未定义

javascript - 找不到模块 'node'

amazon-web-services - 如何生成涉及多个指标的AWS CloudWatch警报

c# - 如何在执行异步方法后调用成功的回调函数?