Я использую readline, чтобы построчно читать текстовый файл и обрабатывать его с некоторой фильтрацией.Текстовый файл содержит множество сокращений и соответствующее целое слово или предложение.Например, «КСТАТИ» означает «кстати».В построчном разделе readlines я делаю некоторую фильтрацию и помещаю нужные строки в массив.
Последний массив выглядит так, к которому я могу получить доступ успешно при событии 'close' и вывести данные по желанию.
var arr = [{wholeword: 'by the way',abbr: 'btw'}, {wholeword: 'увидимся', abr: 'cya'}, {wholeword: 'be be back', abbr: 'brb'}]
Я изо всех сил пытаюсь вернутьпривести к исходной позиции.Я не уверен, возможно ли и как это возможно, потому что readline использует это дополнительное событие, называемое 'close'.Нужно ли как-то работать с обратным вызовом?Никогда раньше не работал с ними, и мне нужно было бы покопаться в этом.Мне просто нужно несколько подсказок, где можно посмотреть, пожалуйста, пролите немного света на это.
const fs = require('fs');
const readline = require('readline');
function lookup(abbreviation) {
var arr = [];
const readFile = readline.createInterface({
input: fs.createReadStream('abbreviations.txt'),
crlfDelay: Infinity
});
readFile.on('line', line => {
if ( line.match( /#/ ) ) {
fields = line.split( ':' ).slice();
arr.push({
foo: fields[0].trim(),
bar: fields[1].trim(),
abbr: fields[2].trim(),
wholeword: fields[3].trim(),
});
}
});
readFile.on('close', function() {
for (var i = 0, l = arr.length; i < l; i++){
if (arr[i].abbr == abbreviation){
let needthis = arr[i].wholeword;
console.log(arr[i].abbr + " --> " + needthis);
return needthis;
}
}
});
}
lookup (кстати);
должен вернуть " между прочим "но на самом деле он возвращает только undefined .Однако вывод console.log внутри моей секции «close» readline успешен.Он просто не возвращает результат вызывающему вызову.Я нашел эту тему здесь ( Возвращает массив из модуля readline для node.js при событии закрытия ), но не смог отразить его в моем коде с успехом.Либо я получил сообщение «обратный вызов не является функцией», либо не было получено никакого значения, как ожидалось.Очевидно, я сделал что-то не так, пытаясь реализовать предложения из этого поста.
1-й вопрос:
Как правильно вернуть этот результат / результат?
Кроме того, я хотел бы узнать и понять, как лучше всего подойти к поиску хорошего исполнителя в этом примере.На самом деле я открываю + чтение + обработка текстового файла при каждом поиске.Я думаю, это нехорошо, и было бы более целесообразно, чтобы текстовый файл читался только один раз в начале и записывал необходимые строки в массив.Каждый поиск должен затем использовать этот массив в качестве таблицы поиска, чтобы найти соответствующую строку и вывести сокращенное слово.
2-й вопрос:
Какой будет наиболее эффективный подход для поиска