什么是从Node.js的一个AWS lambda函数返回的路吗?

问题描述 投票:0回答:1

我是新来的AWS Lambda和有一件事我觉得很困惑。

到目前为止,我发现下面的选项如何在Node.js的一个函数返回:

1.

exports.handler = (event, context) => {
    context.succeed('ok');
}

2.

exports.handler = (event, context) => {
    context.done(null, 'ok');
}

3.

exports.handler = (event, context, callback) => {
    callback(null, 'ok');
}

4.

exports.handler = async event => {
    return "ok";
}

如何在这些不同?任何功能或性能的区别?

任何人都可以解释如何以正确的方式终止函数?

node.js aws-lambda
1个回答
4
投票

你可能会使用Node.js的8.10,这是迄今为止由AWS LAMBDA支持的最后一个Node.js的版本,否则最后的(4)段woudn't在所有的工作(由于语法错误)。

在Node.js的8.10上面列出的所有变体是有效的,其中大部分仍然存在只是为了与早期运行时版本的兼容性。

拳头两(1和2)是最早的,它的不推荐再使用它们。该done(err?, res?)功能是等同于后来补充callback(err?, res?),这Node.js的8.10之前经常使用,你仍然可以找到很多的代码示例,即使在官方文档。这是一个典型的回调,并可能在异步处理中使用:

exports.handler = (event, context, callback) => {
    var params = {
        Bucket: "examplebucket", 
        Key: "HappyFace.jpg"
    };
    s3.getObject(params, function(err, data) {
        if (err) return callback(err);
        callback(null, data);
    });    
}

不过,这个功能有使用普通(回调地狱)回调的所有缺点。

截至Node.js的8.10可以用async/await语法糖,这使得异步计算样子同步一起使用的承诺。 AWS的JavaScript SDK附加功能promise()几乎所有的功能,以前使用的回调。现在,你可以这样写:

exports.handler = async event => {
    var params = {
        Bucket: "examplebucket", 
        Key: "HappyFace.jpg"
    };
    var data = await s3.getObject(params).promise();
    // here you process the already resolved data...
    return data;

    // or you can omit `await` here whatsoever:
    // return s3.getObject(params).promise();
}

产生短eleganter代码更易读的人。

当然,到了最后,你可以选择你喜欢的,只是比较你的榜样片段......

© www.soinside.com 2019 - 2024. All rights reserved.