2014-04-28 54 views
0

有點像這樣嗎?節點是否有可能做事件陳述?

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

因爲我想做一些不同的事情,取決於是否有東西是管道的功能或不。

我猜這不會工作,因爲異步節點是如何,但我至少需要這樣的東西。

最重要的是我需要一些東西來運行或者但不是兩個,如果我要實現一個回調它不會像我想要的那樣工作,因爲無論我在this.on之後放置的代碼仍然會運行,我需要它不運行,如果this.on火災。

編輯:process.nextTick()是我需要的嗎?

回答

0

好吧,我需要做的是推遲到下一個堆疊工藝與process.nextTick(),使其執行之後的回調。對被執行。所以它是這樣的:

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將永遠不會觸發因此它的確定不喜歡這樣。

我現在可以有一個功能,可以有數據流,或根據具體情況直接使用。

我正在使用的實際功能做得稍多一點,看起來有點不同,但概念是一樣的。

0

我不能在需要它的地方放映真實的情況。我想嘗試做這樣的事情:

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

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

    setTimeout(delayedExecution, 1000); 
} 

mainContextFunction(); 
+0

我試圖複製mikeal的「請求」功能,以便您可以同時管道請求或直接使用請求。因爲我只想運行代碼,我需要確定它是否被管道連接,所以我可以確保代碼運行正確,如果真的不可能,那麼我只需要創建單獨的版本,一個用於流和對於非流。我試圖通過他的代碼來弄清楚他是如何做到的,但我無法看到它。 – Thermatix

+0

你需要檢查你的函數的調用者是誰,如果調用者是EventEmitter進入if? – 3y3