在 Amazon Lambda 示例中使用异步?
Use of async in Amazon Lambda example?
我正在查看 Amazon Lambda 用于调整 S3 存储桶中图像大小的示例代码。 Example code(为清楚起见被截断):
// Download the image from S3, transform, and upload to a different S3 bucket.
async.waterfall([
function download(next) {
// Download the image from S3 into a buffer.
s3.getObject({Bucket: srcBucket, Key: srcKey}, next);
},
function tranform(response, next) {
gm(response.Body).size(function(err, size) {
// do resize with image magic
}
}
]);
//... more handling code
...显示他们正在使用异步瀑布流。但是,这些有序步骤中的每一个似乎都依赖于前一个函数的结果。所以本质上,这是一个顺序操作。
这里使用异步瀑布有什么好处?这与 Amazon 的 Lambda 执行引擎有关,还是只是节点中的明智设计决策?
正如您所描述的,这基本上是一个明智的设计决定。
该示例的作者没有进入 "callback hell",而是通过使用 waterfall
.
基本上扁平化了代码
替代代码如下所示:
s3.getObject({Bucket: srcBucket, Key: srcKey}, function(response){
gm(response.Body).size(function(err, size) {
// do resize with image magic
}
});
它的可读性较差,并且随着向处理中添加步骤而变得更加复杂和可读性降低。
我正在查看 Amazon Lambda 用于调整 S3 存储桶中图像大小的示例代码。 Example code(为清楚起见被截断):
// Download the image from S3, transform, and upload to a different S3 bucket.
async.waterfall([
function download(next) {
// Download the image from S3 into a buffer.
s3.getObject({Bucket: srcBucket, Key: srcKey}, next);
},
function tranform(response, next) {
gm(response.Body).size(function(err, size) {
// do resize with image magic
}
}
]);
//... more handling code
...显示他们正在使用异步瀑布流。但是,这些有序步骤中的每一个似乎都依赖于前一个函数的结果。所以本质上,这是一个顺序操作。
这里使用异步瀑布有什么好处?这与 Amazon 的 Lambda 执行引擎有关,还是只是节点中的明智设计决策?
正如您所描述的,这基本上是一个明智的设计决定。
该示例的作者没有进入 "callback hell",而是通过使用 waterfall
.
替代代码如下所示:
s3.getObject({Bucket: srcBucket, Key: srcKey}, function(response){
gm(response.Body).size(function(err, size) {
// do resize with image magic
}
});
它的可读性较差,并且随着向处理中添加步骤而变得更加复杂和可读性降低。