我是新来的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的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代码更易读的人。
当然,到了最后,你可以选择你喜欢的,只是比较你的榜样片段......