我尝试通过树执行递归,以便为树中的每个节点执行node_func
。 node_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)
当我运行它时,它会在第一个分支上运行,当它到达&#34;停止条件&#34;我收到以下错误:
TypeError: undefined is not a function
指向这一行:
return callbackSN(); //Stop Condition
在停止条件下
答案 0 :(得分:1)
在第
行return callback(err)
您正在调用回调函数,但未在代码中定义。我想你想调用callbackSN函数。
return callbackSN(err)
答案 1 :(得分: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)
第二个变量&#34; db&#34;无法从异步调用node_func
,因此造成了混乱。
我添加了&#34; db&#34;父函数的变量作为局部变量。