javascript - 更好地使用异步IO

标签 javascript node.js asynchronous papaparse

我对 JS 很陌生,对 Node.js 甚至更陌生。因此,使用“传统”编程范例,我的文件如下所示:

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

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

d.parse(file);

所以这有很多问题:

  1. 这不是异步的
  2. 我的文件大于默认的最大文件大小(此文件大约为 60mb),因此目前会损坏(不能 100% 确定是否是这个原因)。

我的问题:如何异步加载一个大文件(对于将来的使用,该文件将明显大于 60mb),并在获取信息时进行解析。那么作为后续,我如何知道一切何时完成?

最佳答案

您应该创建一个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);
    });
}

您可以使用如下方法:

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

    // File has been read and parsed
}

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

关于javascript - 更好地使用异步IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30774201/

相关文章:

javascript - 通过使用 Jquery 插入 javascript 加载 LinkedIn 成员(member)个人资料

angular - 测试返回 Promise 的 Angular 2 服务

javascript - 如何在 UI 自动化中捕获响应数据

javascript - 在 Node.js 中,我如何从其他文件中获取 "include"函数?

javascript - webpack 需要的动态文件路径?

python - 如何为异步生成器提供来自 python.net 的事件

Android 在不再可见时停止异步加载列表元素

javascript - 自动属性

javascript - 如何向 HTML5 播放器添加下载视频按钮?

javascript - Javascript 嵌套问题中的正则表达式匹配