如何对范围循环应用异步?

时间:2014-08-06 09:27:24

标签: arrays node.js asynchronous

据我了解,async仅适用于数组。

我的应用程序正在读取1.2GB的文件,我想以1024KB的部分内容阅读。因为RAM问题,我想每次读10个部分。从documentation开始,eachlimit(arr, 10, iterator, callback)对我来说是正确的功能。

问题在于我无法将所有部件放入阵列中。这,因为如果我这样做,Ram问题将会提升,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次循环,然后继续。

1 个答案:

答案 0 :(得分:1)

您不需要异步来转换&amp;将大文件上传到S3。

只需(大)文件,执行您需要的转换,并使用Knox将结果直接传递给amazon 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