似乎不可能传递一些在另一个AWS lambda函数中作为AWS lambda函数调用的代码(包含数据和函数).
例如,使用此customConfigLambda:
var callbackPayload = {};
callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };
exports.handler = (event, context, callback) => {
callback(null, callbackPayload);
};
当我在另一个AWS lambda函数中调用之前的AWS lambda函数时,如下所示:
var AWS = require('aws-sdk');
AWS.config.update({accessKey: '123', secretAccessKey: 'abc', region: 'us-east-1' });
var lambda = new AWS.Lambda({region: 'us-east-1'});
exports.handler = (event, context, callback) => {
var params = {FunctionName: 'customConfigLambda'};
lambda.invoke(params, function(err, callbackPayload) {
if (err) {
// do nothing
}
else {
console.log('callbackPayload:', JSON.stringify(callbackPayload, null, 2));
}
});
};
然后我只能看到callbackPayload.fooData而不是callbackPayload.fooFunction.
如何在多个其他AWS lambda函数之间共享一些callbackPayload.fooFunction?
最佳答案 请参阅有关使用回调参数的文档:
它说明了结果(代码中的callbackPayload):
result – is an optional parameter that you can use to provide the
result of a successful function execution. The result provided must be
JSON.stringify
compatible. If an error is provided, this parameter is
ignored.
要兼容JSON.stringify,你不能拥有任何功能.请参阅http://json.org/以查看什么是有效的JSON(仅限字符串,数字,对象,数组,true,false和null).
如果您希望在广义上在AWS Lambda函数之间共享代码,则必须在两者中都需要相同的Node模块,以便您可以为所有AWS Lamda处理程序提供一组通用函数.但是你不能在它们之间传递任意代码,因为它们无法在JSON.stringify中存活.
作为测试,您可以尝试在浏览器中运行它:
var callbackPayload = {};
callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };
alert(JSON.stringify(callbackPayload));
(见DEMO)
或节点中的这个:
var callbackPayload = {};
callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };
console.log(JSON.stringify(callbackPayload));
并看到结果:
{"fooData":"fooFromData"}
在序列化过程中删除了这些函数.
当然你可以这样做:
callbackPayload.fooFunction
= function() {return 'fooFromFunction'; }.toString();
并获得JSON结果:
{"fooData":"fooFromData","fooFunction":"function () {return 'fooFromFunction'; }"}
你理论上可以在另一端评估,但我不会真的推荐它.