关于readline和Promise求助
发布于 9 年前 作者 notail 4616 次浏览 最后一次编辑是 8 年前 来自 问答

求大神解惑,

捕获.PNG

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

4 回复

readline 是干啥的呢?

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

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

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

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);
  }
}
回到顶部