node是否可以对事件进行if语句?

时间:2014-04-28 09:51:43

标签: node.js stream

有点像这样吗?

if (this.on('pipe',function () {
  return true
}){
  //do something if piped 
}else{
  //do something if not piped
}

因为我想做一些不同的事情,这取决于是否有东西通过管道连接到该功能。

我猜不会因为异步节点的原因而无法工作,但我至少需要这样的东西。

最重要的是我需要运行OR或者两者都运行,如果我要实现一个回调它就会像我想要的那样工作,因为我在this.on之后放了一些代码仍然会运行,如果this.on触发,我需要它才能运行。

编辑:process.nextTick()会成为我需要的吗?

2 个答案:

答案 0 :(得分:0)

我无法想象它需要的真实情况。我想你试着做这样的事情:

function mainContextFunction() {
  var isPiped = false;
  this.on('pipe', function(){isPiped = true;});

  function delayedExecution() {
    if (isPiped) ...;
    else ...
  }

  setTimeout(delayedExecution, 1000);
}

mainContextFunction();

答案 1 :(得分:0)

好的,我需要做的是将它延迟到process.nextTick()的下一个堆栈进程,以便在执行.on回调后执行。所以它是这样的:

upload = function (path,file,callback){ 
  this.notpiped = true
  this.on('pipe',function () {
    this.notpiped = false
  })
  process.nextTick(function() {
      if(this.notpipe){
          cback(path,file,callback)
      }
  })
  this.end = function () {
    //handle piped data, eg, parse it, or set it or whatever and then use cback
  }
}

upload.prototype._write = (chunk, encoding, callback){
  this.data = this.data + chunk
}

所以现在这个.end会像正常情况一样点火,如果.pipe被调用就可以了但是如果没有调用管道,那么.end将永远不会被激活所以可以这样做此

我现在可以拥有一个可以将数据流式传输到其中的函数,或者根据具体情况直接使用。

我正在使用的实际功能比这更多,看起来有点不同但概念是一样的。