3

我正在查看 Amazon Lambda 用于在 S3 存储桶中调整图像大小的示例代码。 示例代码(为清楚起见截断):

// 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

...表明他们正在使用异步瀑布。但是,这些有序步骤中的每一个似乎都依赖于前一个函数的结果。所以本质上,这是一个顺序操作。

在这里使用异步瀑布有什么好处?这与亚马逊的 Lambda 执行引擎有关,还是只是节点中的一个明智的设计决策?

4

1 回答 1

4

正如您所描述的,这基本上是一个明智的设计决定。该示例的作者基本上没有进入“回调地狱” ,而是使用waterfall.

替代代码如下所示:

s3.getObject({Bucket: srcBucket, Key: srcKey}, function(response){
  gm(response.Body).size(function(err, size) {
  // do resize with image magic
  }
});

哪个可读性较差,并且随着将步骤添加到处理中,它会变得更加复杂且可读性要低得多。

于 2015-06-17T13:44:06.500 回答