我对nodejs程序有一个小问题。我尝试使用child_process
模块,但以下代码只会在我从nfc读卡器中取出卡后触发data
事件。
问题是我需要的输出在卡被移除之前可用。
例如,如果我将我的卡放在阅读器上,则需要半秒钟来打印一些包含卡片UID的行。
然后,如果我不发布该卡,程序nfc-poll
仍将有效,但不会输出任何内容。一旦我从读卡器中取出我的卡,它就会输出一些东西,然后关闭缓冲区。这是发出事件data
的时间。
我想要的是能够尽快读取每个字节以尽快发出卡片ID。
function NFCReader() {
this.reader = new events.EventEmitter()
this.start_process()
}
NFCReader.prototype = {
start_process: function () {
this._process = cp.spawn('nfc-poll', [], {})
this._process.on('close', this.restart_process.bind(this))
//this._process.stdout.on('data', this.handle_data.bind(this))
this._process.stdout.readableFlowing = true
this._process.stdout.on('data', this.handle_data.bind(this))
this._process.stderr.on('data', this.handle_error.bind(this))
},
handle_data: function (data) {
var _data = data.toString()
var uid_lines = _data
.split('\n')
.filter(function (line) {return line.search('UID') >= 0})
if (uid_lines.length != 1) {
this.reader.emit('error', 'Multiple UID found')
return
}
var card_id = uid_lines[0]
.trim()
.split(':')[1].trim()
.replace(/[ ]+/g, ':')
this.reader.emit('card', card_id)
},
}
我尝试使用烟斗,但它似乎没有帮助。
答案 0 :(得分:0)
这是我release tools repo的一个runStream函数:
__git_complete grb _git_rebase
您可以复制它,或者如果您想要等待几天,我可以将其作为单独的模块发布。我想虽然可能已经有类似的东西......