0

我尝试通过树执行递归,以便为树中node_func的每个节点执行。node_func还返回树下的下一个值[values]

我使用async.eachSerieswhich 获取树的下一级中的节点列表。该函数在树的第一个分支上成功运行,但是在我有停止条件的叶子上,我尝试调用callbackbut it's 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

在停止条件

4

2 回答 2

1

在行

return callback(err)

您正在调用回调函数,但它没有在您的代码中定义。我猜你想调用 callbackSN 函数。

return callbackSN(err)
于 2014-12-28T16:06:03.123 回答
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)

node_func无法从异步调用第二个变量“db” ,因此造成了混乱。

我在父函数中添加了“db”变量作为局部变量。

于 2014-12-28T17:23:09.667 回答