我试图从另一个Lambda函数中调用一个Lambda函数。我设置了我的权限,这不是问题。
我的问题是该函数不会等待Invoke函数完成并一直返回NULL。
以下是我使用的代码:
const AWS = require('aws-sdk');
exports.handler = async (event, context, callback) => {
var lambda = new AWS.Lambda({region: 'us-east-1', apiVersion: '2015-03-31'});
var params = {
FunctionName: 'testFunction',
InvocationType: 'RequestResponse'
}
lambda.invoke(params, function(err, data){
console.log(err);
console.log('here');
}).promise().then(data=> { callback(null, {message:'done'}); });
};
{message:'done'}
它从未显示过。建议我使用invokeAsync,但AWS不推荐使用该功能。
我知道问题是该函数正在同步运行lambda.invoke,因为如果我在lambda.invoke函数之外添加callback(null, {message:'done'});
,那么我可以看到console.logs工作。
任何帮助?
答案 0 :(得分:0)
TL; DR - 删除" async"在第3行,它应该工作。
您的问题似乎是由 async 关键字引起的。我重新创建了这个并将它部署到Lambda以在Node v8.10上运行(但指向它当然调用我自己的lambda函数之一)。
你为什么使用" async"在这里呢? async关键字声明定义了一个异步函数并返回一个AsyncFunction对象。预计AWS Lambda是一个函数,而不是AsyncFunction,而你的" null"结果可能只是Lambda立即放弃,因为它无法找到常规功能。此外,async
几乎仅与await
一起使用(至少在我见过的99%的情况下都是这样),并且因为您的代码不使用{{1}我根本没有看到任何使用await
的理由。