TPP*_*PPZ 6 callback amazon-web-services node.js aws-lambda
似乎不可能在另一个AWS lambda函数中传递作为AWS lambda函数调用的某些代码(包含数据和函数)。
举个例子customConfigLambda:
var callbackPayload = {};
callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };
exports.handler = (event, context, callback) => {
    callback(null, callbackPayload);
};
Run Code Online (Sandbox Code Playgroud)
当我在另一个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));
        }
    });
};
Run Code Online (Sandbox Code Playgroud)
然后我只能看到callbackPayload.fooData但看不到callbackPayload.fooFunction。
如何callbackPayload.fooFunction(s)在其他多个AWS Lambda函数之间共享一些内容?
请参阅有关使用回调参数的文档:
\n\n\n\n它是关于result(callbackPayload代码中的)的:
\n\n\nresult \xe2\x80\x93 是一个可选参数,可用于提供函数成功执行的\n 结果。提供的结果必须
\nJSON.stringify兼容。 \n 如果提供错误,则忽略此参数。
为了JSON.stringify兼容,你不能在那里拥有任何功能。请参阅http://json.org/以了解什么是有效的 JSON(仅限字符串、数字、对象、数组、true和false)null。
如果您希望在广义上在 AWS Lambda 函数之间共享代码,则必须require在这两个函数中使用相同的 Node 模块,以便您可以为所有 AWS Lambda 处理程序提供一组通用的函数。但是您不能在它们之间传递任意代码,因为这些代码将无法在JSON.stringify.
作为测试,您可以尝试在浏览器中运行此命令:
\n\nvar callbackPayload = {};\n\ncallbackPayload.fooData = \'fooFromData\';\ncallbackPayload.fooFunction = function() {return \'fooFromFunction\'; };\n\nalert(JSON.stringify(callbackPayload));\nRun Code Online (Sandbox Code Playgroud)\n\n(请参阅DEMO)\也不是 Node 中的这个:
\n\nvar callbackPayload = {};\n\ncallbackPayload.fooData = \'fooFromData\';\ncallbackPayload.fooFunction = function() {return \'fooFromFunction\'; };\n\nconsole.log(JSON.stringify(callbackPayload));\nRun Code Online (Sandbox Code Playgroud)\n\n并查看结果:
\n\n{"fooData":"fooFromData"}\nRun Code Online (Sandbox Code Playgroud)\n\n这些功能在序列化过程中被剥离。
\n\n当然你可以这样做:
\n\ncallbackPayload.fooFunction\n    = function() {return \'fooFromFunction\'; }.toString();\nRun Code Online (Sandbox Code Playgroud)\n\n并得到 JSON 结果:
\n\n{"fooData":"fooFromData","fooFunction":"function () {return \'fooFromFunction\'; }"}\nRun Code Online (Sandbox Code Playgroud)\n\n理论上你可以eval在另一端,但我不会真正推荐它。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3125 次  |  
        
|   最近记录:  |