我试图从另一个函数中调用一个Lambda函数。我设置了权限,这样就没有问题了。
我的问题是,函数不会一直等待调用函数完成并返回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正常工作。
有什么帮助吗?
发布于 2018-05-21 19:19:04
TL;DR -删除第3行中的“异步”,它应该可以工作。。
您的问题似乎是由这里的异步关键字引起的。我重新创建了这个函数,并将其部署到Lambda,以便在Nodev8.10上运行(当然,指向它可以调用我自己的lambda函数之一)。
你为什么在这里使用“异步”?异步关键字声明定义一个异步函数并返回一个AsyncFunction对象。AWS应该是一个函数,而不是AsyncFunction,您的"null“结果可能就是Lambda立即放弃,因为它找不到一个常规函数。而且,async几乎完全与await一起使用(至少在我见过的99%的情况下是这样),而且由于您的代码根本没有使用await,所以我也看不到使用async的任何理由。
https://stackoverflow.com/questions/49693346
复制相似问题