在 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
  }
});

它的可读性较差,并且随着向处理中添加步骤而变得更加复杂和可读性降低。