这是我的Java代码:
var params = {
FunctionName: "theTable",
InvokeArgs: JSON.stringify({ "name": "KirklandWA" })
};
lambda.invokeAsync(params, function (err, data) {
if (err) console.log(err, err.stack); // an error occurred
else {
console.log(data);
}
});
这是在Lambda中:
exports.handler = async (event, context) => {
return "theReturnedValue";
};
发生的事情是它没有返回theReturnedValue
,而是返回了
{状态:202} 状态:202
Lambda
中的代码正在被调用,我在Cloudwatch
处已确定它。
答案 0 :(得分:2)
您正在使用invokeAsync
进行调用,该操作将仅返回文档中所述的状态代码。将invoke
与InvocationType: "RequestResponse"
一起使用
参考: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#invoke-property
var lambda = new AWS.Lambda({});
var params = {
FunctionName: "function_name",
InvocationType: "RequestResponse"
};
response = lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
答案 1 :(得分:0)
验证您的lambda是否已选择为NodeJs 8.10运行时,一旦验证,您必须直接返回promise:
exports.handler = async (event, context) => {
return await new Promise((resolve, reject) => {
resolve({ message: "hello world" });
});
};
我在aws-sdk documentation中查看invokeAsync方法定义,并且状态码很好:
回调参数:
- err(错误)—从请求返回的错误对象。如果请求成功,则设置为null。
- data(对象)—从请求返回的反序列化数据。如果发生请求错误,则设置为null。数据对象具有 以下属性:
- 状态-(整数)成功后将为 202 。
我为您准备了一个基本示例,请查看 handler.js 文件:
https://github.com/ns4lin4s/stackoverflow
别忘了,您必须指定响应正文:
所以,当您完成操作后,请让我知道它的工作原理!
答案 2 :(得分:0)
问题是您的lambda function
没有返回任何内容给呼叫者。
您的句柄功能具有第三个参数,它是一个回调函数,用于将结果返回给调用者。
callback
函数接受两个值,分别是Error和结果
callback(Error error, Object result);
如果提供Error值,lambda将抛出您提供给用户的错误,如果不提供Error值但返回结果,则将返回结果
所有记录都很好here
这是基本示例
callback(); // Indicates success but no information returned to the caller.
callback(null); // Indicates success but no information returned to the caller.
callback(null, "success"); // Indicates success with information returned to the caller.
callback(error); // Indicates error with error information returned to the caller.
您的处理程序函数应该是。
exports.handler = async (event, context,callback) => {
callback(null, "theReturnedValue");
};