2014-03-19 77 views
9

我有一個大量使用async.js模塊的大型node.js應用程序。node.js async.js nextTick vs setImmediate

我有這樣大量的代碼:

async.series([ 
    function(callback){ 
     sql.update(query, callback); 
    }, 
    function(callback){ 
     if (something){ 
      sql.update(query2, callback); 
     } 
     else{ 
      callback(null); 
     } 
    } 

]);

最大的問題是else語句中的同步回調。我讀了一段時間,你不應該這樣做與async.js,因爲它可能會導致意想不到的結果,但我不知道什麼是最好的選擇。我讀過我應該在某些地方使用process.nextTick,但現在我正在閱讀,我們不應該使用它,它應該設置爲立即。

有人能指出我正確的方向嗎?謝謝!

+0

你可以鏈接到你讀的地方,你不應該那樣做?我沒有看到它的問題。這是異步應該使用的方式。當你完成了你的回調函數的執行。直到回調被調用後,後續函數纔會運行。 –

+0

我希望我能找到它。我前一段時間讀過。我知道這個回調需要被調用,但我認爲它應該被包裝在我提到的一個函數中,以便對回調進行異步調用。我們確實有一些古怪的地方。不知道它是來自這個還是其他的東西,但認爲我會刪除任何可能是問題的東西。 – Christie

+0

我不認爲它是「錯誤的方向」..問題應該是別的..如果沒有錯誤,'callback'的第一個參數應該爲空,否則'.series'調用將會退出錯誤。嘗試用'console.trace()',斷點和更多輸出來調試它。 – Gntem

回答

6

我最後找到了我記得一段時間閱讀的參考資料。

正是這個頁面上: http://caolanmcmahon.com/posts/nodejs_style_and_structure/

他討論了在規則#3和響應頁面上的第一個評論更直接的關係我的問題一般情況下。

即使它不是我的隨機錯誤的原因,我想根據作者的意圖使用該模塊,這是問題的要點。

在這篇文章中,他提到使用process.nextTick,但我真的覺得節點正試圖在這種情況下,以從移開,我發現從一個月前,說在異步線程問題的迴應:

「你需要確保你的函數是異步運行的 - 如果你不知道它是否是異步的,你可以使用setImmediate強制它是異步的」

所以,這就是我要去的答案用。我將在setImmediate中包裝任何同步回調。

+2

鏈接斷了BTW。 – Dodekeract