如何在调用它的函数结束时执行回调

How to execute the callback at the end of the function calling it?

本文关键字:结束 执行 回调 函数 调用      更新时间:2023-09-26

在我的 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 有一个在"end"触发的关闭事件

所以,你的代码应该是

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代码中哪一个更具可读性