【发布时间】:2018-09-21 19:37:47
【问题描述】:
我想使用 nodejs 逐行读取文件,然后在完成时将返回的结果作为 json 字符串。我试图这样做,但最后 console.log 打印 undefined 而不是列表。我得到了 list 和 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;
});
};
【问题讨论】:
-
你能说几句你为什么使用
readline、stream和Promise吗?一个简单的fs.readFile不能在你的情况下完成这项工作吗? -
此 OP 中的第一个控制台日志打印函数返回的值。这是未定义的,因为该函数不返回任何内容。如果您随后没有看到记录的结果,则可能是由于读取错误(可能未找到文件)。您可以通过
rd.on('error' ...发现这一点
标签: node.js promise filereader es6-promise line-by-line