Wuu*_*ubb 3 asynchronous amazon-web-services node.js aws-lambda
我有 2 个 lambda,test1它们调用test2. 我想以test2“即发即忘”的心态异步调用。
下面是两个 lambda 表达式的代码。当我将 设置为InvocationType时RequestResponse,该函数被调用并且在 CloudWatch 中有一个日志。当我将 更改为InvocationType时Event,CloudWatch 中没有被调用函数的记录。
测试1:
const AWS = require('aws-sdk');
const lambda = new AWS.Lambda();
exports.handler = async (event) => {
const params = {
'FunctionName': 'test2',
'InvocationType': 'Event',
'Payload': JSON.stringify('Hello')
};
const response = await lambda.invoke(params).promise();
return response;
};
Run Code Online (Sandbox Code Playgroud)
测试2:
exports.handler = async (event) => {
console.log(event);
return 'Success';
};
Run Code Online (Sandbox Code Playgroud)
IAM 策略包括调用权限(否则该RequestResponse类型也不起作用)。我还阅读了有关您可以传递的参数大小的限制,但在这种情况下,我只传递了“你好”......什么给出了?
编辑:我还应该补充一点,在每种情况下,我都会收到 202 的响应代码,这表明调用成功,我只是在日志中看不到正在执行的函数的证据。
编辑 2:我已经添加await到 的末尾test1,但仍然没有看到任何迹象表明在 CloudWatch 中调用了 test2。
我认为只是await缺少:
exports.handler = async (event) => {
const params = {
'FunctionName': 'test2',
'InvocationType': 'Event',
'Payload': JSON.stringify('Hello')
};
await lambda.invoke(params).promise();
};
Run Code Online (Sandbox Code Playgroud)
没有await承诺 fromlambda.invoke(params).promise()退出 lambda 执行而不解决该承诺。
因为 lambda 是异步调用的,所以没有返回结果。
您可以检查test2lambda的 CloudWatch 日志以查看是否已被调用。
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |