有点像这样吗?
if (this.on('pipe',function () {
return true
}){
//do something if piped
}else{
//do something if not piped
}
因为我想做一些不同的事情,这取决于是否有东西通过管道连接到该功能。
我猜不会因为异步节点的原因而无法工作,但我至少需要这样的东西。
最重要的是我需要运行OR或者两者都运行,如果我要实现一个回调它就会像我想要的那样工作,因为我在this.on
之后放了一些代码仍然会运行,如果this.on
触发,我需要它才能运行。
process.nextTick()
会成为我需要的吗?
答案 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
将永远不会被激活所以可以这样做此
我现在可以拥有一个可以将数据流式传输到其中的函数,或者根据具体情况直接使用。
我正在使用的实际功能比这更多,看起来有点不同但概念是一样的。