2016-11-11 135 views
0

下面的代碼工作 - 但是在我將NODEJS從4 ..更新到6.9.1後,它突然拋出一個錯誤(對於每個調用)......意味着它完美地執行所有遞歸調用,並且之後告訴我像下面的錯誤消息的20倍...NodeJS SetImmediate和回調函數

「回調」參數必須是一個函數。

我發現錯誤 - 每件事情都很好。它是一個遞歸調用 - filterTrades。我一直這樣使用它很長一段時間 - 從來沒有問題。該怎麼辦?我猜這些代碼使用不必要的資源來捕捉某些東西(實際上並不需要)?

var id = setImmediate(filterTrades(rows, indexStart, indexEnd, offset)); 
clearImmediate(id); 
+2

'filterTrades'是否返回函數? –

+0

將2個linies放置在函數filterTrades()中。就像我寫的 - 它的遞歸。 – PabloDK

+0

這不相關; 'setImmediate'的參數應該是一個函數,而你正在*調用一個函數,因此有關'filterTrades'返回的問題。 –

回答

0

@DaveNewton是錢 - 你可能想

var id = setImmediate(() => filterTrades(rows, indexStart, indexEnd, offset)); 
clearImmediate(id); 

和ES5方式

var id = setImmediate(function(){ 
    filterTrades(rows, indexStart, indexEnd, offset); 
}) 
clearImmediate(id); 
+0

語法不被識別(通過WebStorm)? – PabloDK

+0

它可能不會更新到皮棉es6 –

+0

@PabloDK \t然後使用標準ES5做同樣的事情 –

0

也許你應該

filterTrades(rows, indexStart, indexEnd, offset); 

,並替換此代碼沒有setImmediate/clearImmediate。

  1. 在以前的Node.js版本中,像你這樣的非函數調用setImmediate將不會做任何事情。然後,調用clearImmediate將不會執行任何操作。因此,要重現該行爲,只需執行副作用(即調用filterTrades),但刪除所有setImmediate/clearImmediate的東西。

  2. 即使在Node.js的當前版本,提出了通過例如代碼@斯卡夫的回答無能爲力。如果您立即設置並立即清除它,那意味着什麼都不會執行。因此,@ skav的版本將完全刪除對filterTrades的呼叫;它等同於完全刪除代碼。

+0

我不同意。代碼一如既往的完美。 DOC說:clearImmediate(立即)# 添加在:v0.9.1 立即由setImmediate()返回的立即對象。 取消由setImmediate()創建的立即對象。所以我理解它的方式 - 就像...只是取消了返回對象而不是實際本身...否則我的代碼不會運行我猜? – PabloDK

+0

另外...我可以直接看到並調整內存使用setImmediate/clearImmediate在我的代碼中的另一個地方...每個循環之間的工作量...它對演出產生了巨大的影響......所以它什麼都不做 - 事實根本不是這樣。 – PabloDK

+0

和...你怎麼能說@斯卡夫的答案不會執行任何事情?它與我的原始代碼相同,它確實調用我的代碼並執行? – PabloDK