gpt4 book ai didi

javascript - 在回调函数之外访问node.js中readline和fs解析的数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:02 27 4
gpt4 key购买 nike

这个问题与已经有答案的链接问题不同。具体来说,这段代码改编自node.js文档,涉及fs和readfile的使用以及寻找文件结束标志,我了解到这是readfile.close方法。感谢你的回答。

我在本地编写了一个小实用程序,尝试将带有空行分隔程序的 key:value 对的文本文件转换为 JSON 文件,以便在 React 项目中使用。

我直接从node.js文档中获得了readline函数的基础。我在 Mac 上使用的是 Node 6.9.0

这是完整的脚本:

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

const rl = readline.createInterface({
input: fs.createReadStream('usat-ncaa-programs.txt')
});

var newPairs=["test"];
rl.on('line',
function (line) {
if (line===null){
newPairs.push("}], [ {")
} else if (line) {
var keyValue = line.match(/^(.*):(.*)/)
var newKeyValuePair = "'" + keyValue[1].trim() + "': '" + keyValue[2].trim() + "'"
newPairs.push(newKeyValuePair)
//console.log (newKeyValuePair)
}

})

console.log(newPairs)

输入文件如下所示(大约有 12 个程序),我只包含 2 1/2,以便您可以看到格式:

University: Arizona State University
Division: I
University Home Page: http://www.asu.edu/
Recruiting Link: https://questionnaire.acsathletics.com/Questionnaire/Questionnaire.aspx?&SPSID=1061112&SPID=177408&DB_LANG=C&DB_OEM_ID=30300&q=2015&s=159130&o=143
Team Homepage: http://www.thesundevils.com/index.aspx?path=triathlon
Head Coach: Cliff English
w: 480.965.0546
e: cliff.endlish@asu.edu
bg-color: #990033
color: #FFB310

University: Belmont Abby College
Division: II
University Home Page: http://belmontabbeycollege.edu/
Recruiting Link: https://coach.scoutforce.com/p/414f3219dd
Team Homepage: http://abbeyathletics.com/sports/wtri/index
Head Coach: Nick Radkewich
w: 704.461.5010
e: NicholasRadewich@bac.edu
Twitter: https://twitter.com/AbbeyTri
bg-color: #FFFDD0
color: #DC143C

University:Black Hills State University
Division: II
University Home Page: http://www.bhsu.edu/
...

我的问题是,虽然我可以逐行读取文本文件并解析一些看起来像 JSON 文件的信息,但我无法在回调函数之外访问该数据。

我不知道如何将此数据保存到新文件中,甚至不知道如何将对象输出到我的控制台以进行剪切和粘贴并手动编辑。

在上面的脚本中,变量 newPairs 的记录输出是 [“test”],而不是我试图完成的逐行解析。

如果我将 console.log 放在回调中,我会收到每次读取文件迭代时记录的信息。我只想在文件完成后处理数据。

我在 Node 文档中没有找到 fsreadlineEOF 或类似标志。

此外,如果有一种更简单的方法可以将我输入的数据转换为 JSON 格式,我很想听听。提前致谢。

最佳答案

您必须了解回调函数是异步执行的。这意味着 console.log(newPairs) 在回调之前执行,因此它只会产生“test”。

你应该听 Readline 的 close event ,像这样:

rl.on('close', function() {
console.log(newPairs);
});

正如文档所述:

The 'close' event is emitted when one of the following occur:

  • The rl.close() method is called and the readline.Interface instance has relinquished control over the input and output streams;
  • The input stream receives its 'end' event; The input stream receives -D to signal end-of-transmission (EOT);
  • The input stream receives -C to signal SIGINT and there is no SIGINT event listener registered on the readline.Interface instance.
  • The listener function is called without passing any arguments.

The readline.Interface instance should be considered to be "finished" once the 'close' event is emitted.

所以这就是您正在寻找的“EOF”:-)

关于javascript - 在回调函数之外访问node.js中readline和fs解析的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41562038/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com