如何在范围循环上应用asynchronous?

据我所知, async只在数组上工作。

我的应用程序正在读取一个1.2GB的文件,我想在1024KB的部分读取它。 由于RAM问题,我想每次读取10个部分。 从文档中 , eachlimit(arr, 10, iterator, callback)对我来说都是正确的function。

问题是我不能把所有的部分放在数组中。 这是因为如果我能做到这一点,Ram的问题就会boost,而每个eachSeries都是多余的。

换一种说法。 我想切换下面的循环:

  for (var rangeStart = 0; rangeStart < stats.size; rangeStart = rangeStart + partSize) { //Where stats.size = 1200000000; partsize = 1024000, put the part of the file in the range into a buffer } 

同步版本,以便我每次完成10个循环,然后继续。

你不需要asynchronous来转换和上传大文件到S3。

简单地stream (大)文件,做你需要的任何转换,并使用Knox将结果直接传递给亚马逊S3

如果你需要一个详细的例子,请参考: https : //www.npmjs.org/package/stream-to-s3 (我写了一个快速的节点模块来为你说明)

安装:

 npm install stream-to-s3 

用法:

 var S = require('stream-to-s3'); var file = __dirname+'/your-large-file.txt'; S.streamFileToS3(file, function(){ console.log('Awesomeness', file, 'was uploaded!'); console.log('Visit:',S.S3FileUrl(file)); }); 

完成。

更多的细节在GitHub: https : //github.com/nelsonic/stream-to-s3