我正在創建一個該程序,該程序可以找到2個單詞文件的常見單詞,然後使用常用單詞創建一個新文件。 我使用readline模塊讀取第一個單詞文件的每個單詞,然後將該單詞存儲在Trie中。在完成之後,我正在嘗試從另一個單詞文件讀取單詞,如果它位於trie中,我正在寫入文件。節點readline'line'事件未觸發
我使用promises來確保事件順序發生,但第二次'行'事件沒有觸發。
'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,但我不確定。
任何幫助表示讚賞!
因爲我只是從文件中讀取和不寫它,你沒有設置輸出流OO –
@VictoryOsikwemhe或爲用戶設置任何提示,我沒有設置輸出流。我相信輸出流是可選的? :/ – Utkarsh
檢查了這個https://stackoverflow.com/questions/35532332/how-does-readline-rl-write-work?rq=1 –