gpt4 book ai didi

javascript - 如何在调用它的函数末尾执行回调?

转载 作者:行者123 更新时间:2023-12-03 07:50:07 24 4
gpt4 key购买 nike

在我的 Node js 应用程序中,我有一个函数,它从文件中逐行读取,将文件的内容存储在数组中,然后调用回调函数,并将数组传递给回调。

function readFile(callback)
{
var fs = require('fs'), readline = require('readline');

var rd = readline.createInterface({
input: fs.createReadStream('./file.txt'),
output: process.stdout,
terminal: false
});

var data = [];

rd.on('line', function(line) {
data.push(line);
});

callback(data);
}

我面临的问题是 readFile 在读取文件和填充 data 数组之前运行回调。因此回调正在使用空数组运行。当数组完全填满后,如何让它运行?谢谢。

最佳答案

readline有一个close在“结束”时触发的事件

所以,你的代码应该是

function readFile(callback) {
var fs = require('fs'), readline = require('readline');

var rd = readline.createInterface({
input: fs.createReadStream('./file.txt'),
output: process.stdout,
terminal: false
});

var data = [];

rd.on('line', function(line) {
data.push(line);
}).on('close', function () {
callback(data);
});
}

ES2015中:

function readFile(callback) {
var fs = require('fs'), readline = require('readline');

var rd = readline.createInterface({
input: fs.createReadStream('./file.txt'),
output: process.stdout,
terminal: false
});

var data = [];

rd.on('line', line => data.push(line)).on('close', () => callback(data));
}

甚至

function readFile(callback) {
var fs = require('fs'),
readline = require('readline'),
data = [];

readline.createInterface({
input: fs.createReadStream('./file.txt'),
output: process.stdout,
terminal: false
})
.on('line', line => data.push(line))
.on('close', () => callback(data));
}

但我不确定这两个 ES2015 代码中哪一个更具可读性

关于javascript - 如何在调用它的函数末尾执行回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35034426/

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