node.js - nodejs逐行读取文件并在末尾获取其内容

标签 node.js promise filereader es6-promise line-by-line

我想使用 nodejs 逐行读取文件,然后在完成后将返回的结果作为 json 字符串获取。我试图这样做,但最后 console.log 打印未定义而不是列表。我得到了列表和 promise 的结尾,但如何将它返回到 main.js 中的调用函数?

我有我的 main.js 文件:

var fct = require('./romlist-parser');

console.log(fct.myfunction());

并且 romlist-parser.js 具有以下内容:

var fs = require('fs');
var readline = require('readline');

exports.myfunction = function() {

    var promise = new Promise(function(resolve,reject) {
        var rd = readline.createInterface({
            input: fs.createReadStream('Atari 2600.txt'),
            console: false
        });

        var games = [];

        rd.on('line', function(line) {
            var arr = line.split(";");
            games.push({name:arr[0], title:arr[1]});
        });

        rd.on('close', function() {
            var json = JSON.stringify(games);
            resolve(games);
        });

    });

    promise.then((resolveResult) => {
        console.log(resolveResult);
        return resolveResult;
    });
};

最佳答案

试试这个:

exports.myfunction = function() {

    var promise = new Promise(function(resolve,reject) {

        var games = [];
        var rl = readline('./Atari 2600.txt'); // provide correct file path

        rl.on('line', function (line, lineCount, byteCount) {
            // console.log(lineCount, line, byteCount);
            var arr = line.split(";");
            games.push({name:arr[0], title:arr[1]});
        })
        .on('close', function() {
            var json = JSON.stringify(games);
            resolve(games); // resolve(json); may be?? 
        })
        .on('error', function (e) {
            console.log("error", e);
            // something went wrong
        });
    });

    promise.then((resolveResult) => {
        console.log(resolveResult);
        return resolveResult;
    });
};

附言此代码可以进一步改进,但为了简单起见,您的理解答案仅限于帖子中发布的样式/代码。否则它可以根据样式改变样式。

关于node.js - nodejs逐行读取文件并在末尾获取其内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49783188/

相关文章:

Javascript - 文件上传,readAsArrayBuffer?

node.js - 在子文档数组中使用 mongoose $inc

node.js - 为什么我应该使用 PassportJS?

Javascript promise - 隐式解决(或)拒绝发生

javascript - 如何从Django浏览本地文件并存储文件信息

javascript - 如何访问事件监听器之外的变量?

javascript - firestore函数错误: Unexpected error while acquiring application default credentials

node.js - 连续发出多个请求时的 Angular CORS 问题

javascript - .then() 中的错误处理程序不会被触发,除非使用 .success 和 .error

javascript - "A+"中的 "Promise/A+"代表什么?