Node.js 节点是否可以对事件执行if语句?

Node.js 节点是否可以对事件执行if语句?,node.js,stream,Node.js,Stream,有点像这样 if (this.on('pipe',function () { return true }){ //do something if piped }else{ //do something if not piped } 因为我想做一些不同的事情,这取决于是否有东西通过管道传输到函数 不过,我猜这是行不通的,因为异步节点是如何工作的,但我至少需要这样的东西 主要的问题是我需要一些东西来运行,或者两者都运行,但是如果我要实现回调,那么它就不会像我希望的那样工作,因为无论我

有点像这样

if (this.on('pipe',function () {
  return true
}){
  //do something if piped 
}else{
  //do something if not piped
}
因为我想做一些不同的事情,这取决于是否有东西通过管道传输到函数

不过,我猜这是行不通的,因为异步节点是如何工作的,但我至少需要这样的东西

主要的问题是我需要一些东西来运行,或者两者都运行,但是如果我要实现回调,那么它就不会像我希望的那样工作,因为无论我在
this.on
之后放什么代码,它都会运行,如果
this.on
触发,我就不需要运行它


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

我不能在需要的地方设计真实的情况。我想你试着这样做:

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

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

  setTimeout(delayedExecution, 1000);
}

mainContextFunction();
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
}

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

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

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

  setTimeout(delayedExecution, 1000);
}

mainContextFunction();
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
}
所以现在只有在调用
.pipe
时,这个
.end
才会像正常一样启动,但如果没有调用pipe,那么
.end
将永远不会启动,所以可以这样做

我现在可以有一个功能,可以将数据流传输到它,或者根据具体情况直接使用它


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

我试图复制mikeal的“请求”功能,即如何通过管道发送请求或直接使用请求。因为我只想运行代码一次,我需要确定它是否被管道传输,这样我就可以确保代码正确运行,如果真的不可能,那么我就必须创建单独的版本,一个用于流,一个用于非流。我试着通过查看他的代码来找出他是如何做到这一点的,但我就是看不到。你需要检查谁是你函数的调用者,如果调用者是EventEmitter,进入if?