2015-05-27 65 views
3

我在評論Amazon Lambda的示例代碼以調整S3存儲桶中的圖像大小。 Example code(爲了清晰起見,縮略圖):在Amazon Lambda示例中使用異步?

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

這基本上是一個明智的設計決策,就像你描述的那樣。 而不是進入"callback hell"該示例的作者基本上通過使用waterfall扁平代碼。

的替代代碼如下所示:

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

哪家的可讀性,並能得到更復雜和更可讀的步驟添加到處理。