2014-12-24 60 views
9

火力裁判如果我這樣做的節點:如何摧毀節點

console.log('1'); 
console.log('2'); 

輸出:

1 
2 

並且該過程結束。

如果我把它改成這樣:

console.log('1'); 
var Firebase = require('firebase'); 
var ref = new Firebase('https://<some-base>.firebaseio.com/'); 
console.log('2'); 

輸出:

1 
2 

繼續進行處理。

我相信這是因爲ref正在保持這個過程。我知道我可以使用process.exit,但我寧願不這樣做。我其實不希望該進程退出,我只是想確保我沒有內存泄漏問題,我的firebase ref永遠持續。一旦我完成它,有什麼方法可以銷燬Firebase參考?

+0

如果你遇到一些讓我知道 – webduvet

+0

當你準備退出,只是調用'process.exit();' – Kato

+2

@Kato,但我還沒準備好退出。 – kentcdodds

回答

7

[Firebase工程師]目前,使用new Firebase(...)實例化Firebase客戶端將創建一個長期持久連接,使Node.js進程保持活動狀態。

這對於大量用例來說並不理想,我們在這裏有一些工作要做,以確保當沒有未完成的Firebase偵聽器或未完成的寫入服務器時,該進程會乾淨地自動退出,但它已中/低​​優先級。我希望在2015年第二季度發佈一個「修復」,希望能在第一季度發佈。

+1

是否有可能添加明確銷燬引用的方法?這樣,您不必擔心確保沒有聽衆或待處理的文字,確保這些內容得到處理是我的責任。 – kentcdodds

+0

@kentcdodds我們可能會這樣做,但我想它會增加很多複雜性。這個參考本身就是一個小的,價格低廉的客戶端封裝,我們希望保持這種方式。也就是說,我們願意接受這個API的想法! –

+2

這方面有沒有進展? – jpoveda

0

使用tape時發現的一種解決方法是在最後調用test.onFinish(() => process.exit());。這並不理想,但它似乎可以直接完成工作並與測試運行人員一起運行。

例子:

const test = require('tape'); 

test('Some test', (t) => { 
    // test code 
}); 

test('Another test', (t) => { 
    // test code 
}); 

test.onFinish(() => process.exit());