【发布时间】:2021-03-09 04:31:31
【问题描述】:
我有一个 lambda,我想调用多个 lambda 实例并等待最长的完成。
我已经在网上查了一下,发现了非常有趣的话题,但没有一个能帮助我实现我想要的。
代码如下:
Lambda 作为承诺
invokeVideoRenderer = (params) => {
const param = {
FunctionName: 'myFunction',
InvocationType: 'Event',
Payload: JSON.stringify({ body: params })
};
return new Promise(async (resolve, reject) => {
this.lambda.invoke(param, (error, data) => {
if (error) {
reject(error);
}
resolve(data); <--- it always returns { StatusCode: 202, Payload: '' }
});
});
};
我调用不同 lambda 的循环
const promises = [...Array(totalNumberOfLambdaToInvoke).keys()].map(
async (part: number) => {
const body = {
// body
};
const request = await invokeVideoRenderer(body);
return request;
}
);
const results = await Promise.all(promises); <--- here I want to wait for the longest to complete
我正在调用的 lambda:
const myFunction = async (event, context, callback) => {
try {
//...code
callback(null, {
status: 200,
body: JSON.stringify({
status: "SUCCESS",
}),
});
return;
} catch (error) {
callback(null, {
status: 500,
body: JSON.stringify({
status: "FAILED",
errorMessage: error,
}),
});
return;
}
};
我做错了什么?
【问题讨论】:
-
Event 的 InvocationType 告诉 Lambda 异步调用子 Lambda。因此 Lambda 服务会立即响应 202(已接受)响应。同时子 Lambda 函数执行。
-
我应该如何更改代码以等待 lambda 完成?
-
另外,请注意,您不必使用 AWS 开发工具包手动创建/解决承诺。只需使用
return this.lambda.invoke(params).promise()。
标签: node.js amazon-web-services aws-lambda