节点是否可以对事件执行if语句



有点像这样吗?

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

因为我想做一些不同的事情,这取决于某个东西是否通过管道传输到函数。

不过,由于异步节点的原因,我猜这不会起作用,但我至少需要这样的东西。

最重要的是,我需要一些东西来运行OR,但不能同时运行两者,如果我要实现回调,它将不会像我希望的那样工作,因为无论我在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();

好的,我需要做的是用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将永远不会激发,所以可以这样做。

我现在可以有一个函数,可以将数据流式传输到它,也可以根据情况直接使用。

我使用的实际函数比这个做得更多,看起来有点不同,但概念是一样的。

相关内容

  • 没有找到相关文章

最新更新