Я создаю эту программу, которая находит общие слова в файлах с двумя словами, а затем создает новый файл только с общими словами. Я использую модуль readline для чтения каждого слова файла первого слова, а затем сохраняю это слово в Trie. После того, как это было завершено, я пытаюсь прочитать слова из другого файла слов, и если он в порядке, я пишу в файл.
Я использую обещания, чтобы убедиться, что события происходят последовательно, но во второй раз событие «линия» не запускается.
'use strict'
const readLine = require('readline');
const fs = require('fs');
const wordList = require('./Trie.js');
function createTrie(reader, trie) {
return new Promise((resolve, reject) => {
if(typeof reader === 'undefined' || reader === null)
reject('Failed')
reader.on('line', line => trie.add(line))
reader.on('close', () => {
console.log('done')
resolve(trie)
})
})
}
function findCommon(reader, trie) {
return new Promise((resolve, reject) => {
if(typeof reader === 'undefined' || reader === null) {
console.log('failed')
reject('Failed')
}
let commonWords = ''
console.log('we are here')
reader.on('line', (line) => {
console.log(line) // This does not output
if(line.length > 2 && trie.search(line)) {
let word = line + '\n'
commonWords += word
}
})
reader.on('close', () => {
fs.writeFile('wordlist.txt', commonWords, (err) => {
if(err) {
console.log(err)
reject('error')
}
console.log('written')
resolve('Success')
})
})
})
}
let reader_1 = readLine.createInterface({
input: fs.createReadStream('words/enable2k.txt')
})
let reader_2 = readLine.createInterface({
input: fs.createReadStream('words/engmix.txt')
})
createTrie(reader_1, wordList)
.then((trie) => findCommon(reader_2, trie))
.then((data) => console.log(data))
Приведенный выше код дает следующий вывод
done
we are here
Событие «линия» не запускается. Кажется, я неправильно использую readline, но я не уверен.
Любая помощь приветствуется!