2014-12-28 120 views
0

我嘗試通過樹執行遞歸,以便爲樹中的每個節點執行node_funcnode_func也會返回[values]下樹中的下一個值。使用異步運行遞歸函數時的回調錯誤

我使用async.eachSeries它得到樹的下一級中的節點列表。 該函數在樹的第一個分支上成功運行,但在有停止條件的葉上,我嘗試調用callback,但它是undefined

代碼:

function clone(a) { 
    return JSON.parse(JSON.stringify(a)); 
} 
var searchNext = function(params, callbackSN){ 
    var seParams = clone(params); 
    node_func(seParams,function(searchRes){ 
     //Stop Condition - return 
     if (searchRes["nextFeature"] != 1){ 
      return callbackSN(); //Stop Condition 
     } 
     var values = searchRes["values"] 
     var paramsArr = [] 
     for (var i = 0; i < values.length; i++) { 
      var seParams2 = clone(seParams); 
      seParams2["value"].push(values[i]["value"]) 
      paramsArr.push(seParams2)    
     }; 

     async.eachSeries(paramsArr, searchNext, function(err){ 
      return callbackSN(err) 
     });   
    }) 
} 

//init search 
var params = {"value" :[]} 
searchNext(params,console.log) 

當我運行它,它運行在第一個分支,當它到達了「停止條件」我收到以下錯誤:

TypeError: undefined is not a function

指着行:

return callbackSN(); //Stop Condition

在停止狀態

回答

0

我不得不在原始代碼中的錯誤:

function clone(a) { 
    return JSON.parse(JSON.stringify(a)); 
} 
var searchNext = function(params,db, callbackSN){ 
    var seParams = clone(params); 
    node_func(seParams,db,function(searchRes){ 
     //Stop Condition - return 
     if (searchRes["nextFeature"] != 1){ 
      return callbackSN(); //Stop Condition 
     } 
     var values = searchRes["values"] 
     var paramsArr = [] 
     for (var i = 0; i < values.length; i++) { 
      var seParams2 = clone(seParams); 
      seParams2["value"].push(values[i]["value"]) 
      paramsArr.push(seParams2)    
     }; 

     async.eachSeries(paramsArr, searchNext, function(err){ 
      return callbackSN(err) 
     });   
    }) 
} 

//init search 
var params = {"value" :[]} 
searchNext(params,console.log) 

第二可變「DB」在node_func不能從異步調用,因此它製成的混亂。

我在父函數中添加了「db」變量作爲局部變量。

1

在行

return callback(err) 

要調用的回調函數,但它不是在你的代碼中定義。我想你想調用回調SN功能。

return callbackSN(err) 
+0

你說得對。我已經更新了代碼。但是,它仍然沒有達到目標。正如我寫的,它在「停止條件」行上失敗。 – skme

+0

很難看出問題出在哪裏,因爲我不知道代碼的其餘部分是幹什麼的(作爲node_func函數)您可以發佈所有代碼嗎? –

+0

我很確定'node_func'是不相關的,但我會嘗試創建一個我可以輕鬆共享的示例函數。 – skme