【发布时间】:2017-05-27 22:09:01
【问题描述】:
我正在创建一个此程序,它会查找 2 个单词文件的常用词,然后创建一个仅包含常用词的新文件。 我正在使用 readline 模块读取第一个单词文件的每个单词,然后将该单词存储在 Trie 中。完成后,我正在尝试从另一个 word 文件中读取单词,如果它在 trie 中,我正在写入文件。
我正在使用 Promise 来确保事件按顺序发生,但不会触发第二次 'line' 事件。
'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
'line' 事件未触发。似乎我没有正确使用 readline 但我不确定。
感谢任何帮助!
【问题讨论】:
-
你没有设置输出流o.O
-
@VictoryOsikwemhe 因为我只是从文件中读取而不是写入文件或为用户设置任何提示,所以我没有设置输出流。我相信输出流是可选的? ://
标签: javascript node.js events promise readline