更好地使用异步IO

Ree*_*nen 2 javascript asynchronous node.js papaparse

我是JS的新手,甚至比node.j更新.因此,使用"传统"编程范例,我的文件如下所示:

var d = require('babyparse');
var fs = require('fs');

var file = fs.readFile('SkuDetail.txt');

d.parse(file);
Run Code Online (Sandbox Code Playgroud)

所以这有很多问题:

  1. 它不是异步的
  2. 我的文件大于默认的最大文件大小(这个大约是60mb)所以它目前中断(不是100%确定,如果这是原因).

我的问题:如何异步加载一个大文件(这将远远超过60mb,以备将来使用),解析为我获取信息.然后作为后续,我怎么知道一切都完成了?

pst*_*trm 5

您应该创建一个ReadStream.常见的模式看起来像这样.您可以在data事件可用时解析数据.

function readFile(filePath, done) {
    var 
        stream = fs.createReadStream(filePath),
        out = '';

    // Make done optional
    done = done || function(err) { if(err) throw err; };

    stream.on('data', function(data) {
        // Parse data
        out += data;
    });

    stream.on('end', function(){
        done(null, out); // All data is read
    });

    stream.on('error', function(err) {
        done(err);
    });
}
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法:

readFile('SkuDetail.txt', function(err, out) {
    // Handle error
    if(err) throw err;

    // File has been read and parsed
}
Run Code Online (Sandbox Code Playgroud)

如果将已解析的数据添加到out变量中,则整个已解析的文件将被发送到done回调.