2012-11-16 19 views
0

剛剛發現Node.io,儘管文檔,api等沒有了,它看起來不錯。然而,建立我的第一份工作exports.job = new nodeio.Job(..),與方法如input, run,output, reduce, complete我需要某種initialize()方法被調用一次,在連續調用input()完成之前。 (類似的complete在作業完成之前被調用一次)如何調用一次自定義asnyc代碼初始化Node.io作業(在連續調用input()之前)?

任何這樣的方法?

爲了完整性: 此代碼imho必須是node.io流程的一部分(通過某種專用方法),因爲在node.io範圍之外初始化我的異步代碼並不保證數據已經存在node.io作業被執行。

+0

也許我應該更加明確。我正在定義一個node.io作業,使用諸如「輸入,運行,輸出,減少,完成」等方法。當然,在這個文件中(執行'exports.job = new nodeio.Job(..))'之前'我可以初始化一些數據,但是我需要一些異步初始化代碼(一個mongodb查詢結果)。在abobe的情況下,這會導致我的異步init代碼在作業運行之前沒有完成(顯然)。或者,我嘗試在我的異步初始化代碼的回調中調用'exports.job = new nodeio.Job',但導致了node.io錯誤。因此爲此尋找一個專用的node.io方法。 –

+0

請把這一切都在你的問題。格式化。謝謝。 – Neal

+0

我會保持完整。但是我必須問,你是否熟悉Node.io庫?因爲,對於那些熟悉api的人來說,我的評論似乎是多餘的。 –

回答

0

我不知道是否有這樣的方法,你瀏覽過源代碼嗎?看起來好像有一個'init'方法,如果處理器在工作中,它將被處理器調用。如果您嘗試這種方式,而不是您要查找的內容,則可以將其作爲node.io github site上的一項功能。

否則,這將是一個非常簡單的事情來添加自己。只需在對象中添加一個'initialize'方法,然後在'input'或'run'方法的頂部添加以下幾行(如果您需要數據已準備就緒,我認爲它可能會更好):

if (!this.initialized) { 
    this.initialized = true; 
    this.initialize(); 
} 

請注意,這裏有一個很小的性能,當然。但是在大多數情況下,這只是檢查一個變量的值所需的時間量,與您實際需要的處理量相比,這可能非常小。

+0

謝謝。我最終在'input'方法中內聯了init代碼。這是異步代碼,但除此之外,它就像你的建議。 –

相關問題