有点像这样吗?
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
将永远不会激发,所以可以这样做。
我现在可以有一个函数,可以将数据流式传输到它,也可以根据情况直接使用。
我使用的实际函数比这个做得更多,看起来有点不同,但概念是一样的。