【问题标题】:Error on callback when running a recursion function using async使用异步运行递归函数时回调出错
【发布时间】:2015-02-24 23:46:41
【问题描述】:

我尝试通过树执行递归,以便为树中的每个节点执行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

在停止条件下

【问题讨论】:

    标签: node.js asynchronous recursion node-async


    【解决方案1】:

    我在原始代码中有一个错误:

    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”变量作为局部变量。

    【讨论】:

      【解决方案2】:

      在一行

      return callback(err)
      

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

      return callbackSN(err)
      

      【讨论】:

      • 你是对的。我已经更新了代码。但是,它仍然没有到达那里。正如我写的那样,它在“停止条件”行上失败了。
      • 很难看出问题出在哪里,因为我不知道剩下的代码是做什么的(作为node_func函数)你能把所有的代码都贴出来吗?
      • 我很确定 node_func 无关紧要,但我会尝试创建一个我可以轻松分享的示例函数。
      猜你喜欢
      • 2016-09-21
      • 2023-03-28
      • 2015-01-12
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 2013-12-07
      相关资源
      最近更新 更多