关于readline和Promise求助
 发布于 10 年前  作者 notail  5042 次预览  最后一次回复是 10 年前  来自 问答 

求大神解惑,

捕获.PNG

有没有能够把readline的每一行都resolve的方法,这个只把第一行reslove了

4 回复
i5ting

readline 是干啥的呢?

notail

readline是引入的node自带的库,这里能够一行一行的监听proc运行后的标准输出,我想对每一行进行后续处理,利用resolve将这一行给后续的程序用,但是这里有个问题,用resolve后将第一行resolve之后就不会再resolve其他的行了

Jar-18

你要么每次line事件发生后就直接做后续的事,要么每次把line放到一个数组,resolve整个数组。如果’line’事件一定要实时处理,也可以用events,emitter,就是另一种思路了

William17

我猜你代码里大概是这样的

readline.getLongStamp(opts).then(function(line) {
  // 这里处理line
},function(reason) {
  // 这里判断出错或者读完?
});

既然这样, 那就别返回promise了,把处理函数直接传进去调用

opts.onLine = function(line) {
  // ...
}
opts.onClose = function(code) {
  // ...
}
readline.getLongStamp(opts);
exports.getLongStamp = function(opts) {
  // ...
  var onLine = opts.onLine, onClose = opts.onClose;
  if(typeof onLine === 'function') {
    rd.on('line', onLine);
  }
  if(typeof onClose === 'function') {
    proc.on('close', onClose);
  }
}