首页 > 解决方案 > 如何在事件中使用 NodeJs 中的 readline(等待流关闭)

问题描述

我正在创建一个机器人,当它收到消息时开始读取文本文件并使用文件内容响应消息。

不幸的是,我无法摆脱这个异步地狱,我只会得到错误、未定义或承诺

最后一个实验是这样的:

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

// bot.listen("message").reply(responseText())

function readFile(file) {
    var text = '';
        var readInterface = readline.createInterface({
            input: fs.createReadStream(file),
            terminal: false
        });

        readInterface.on('line', function(line) {
            linea = line.trim();
            console.log(linea);
            text += linea;
        }).on('close', function() {
            return text;
        });
    });
}

async function responseText() {
    var content = await readFile("file.txt");
    content.then(function(data) {
        return data;
    })
}

我想得到的是延迟响应,直到我得到文件的内容。我知道该节点是基于异步的,但我不知道如何处理它!

谢谢大家

标签: node.jsasync-awaitreadline

解决方案


如果你想使用async-await需要创建一个promise并返回它。

function readFile(file) {
    return new Promise((res, rej) => {
        try {
            var text = '';
            var readInterface = readline.createInterface({
                input: fs.createReadStream(file),
                terminal: false
            });

            readInterface
                .on('line', function (line) {
                    linea = line.trim();
                    text += linea;
                })
                .on('close', function () {
                    res(text);
                });
        } catch(err){
            rej(err)
        }
    });
}

推荐阅读