Node.js异步递归回调

时间:2016-07-04 08:47:35

标签: javascript node.js asynchronous recursion callback

我在Node.js中有一个递归函数,它依赖于可能在各个点发生的递归调用的返回值。它适用于较小的测试用例,但是一旦我接触到更大的数据集,异步性就会混淆它。

我尝试过使用回调并检查它所遇到的迭代次数是否与数据集的长度相匹配,但是在由于某种原因迭代它之前它会停止(可能是内存问题?)

到目前为止,这是代码的一般流程,通常是对回调的调用:

function recursiveCall(value, array, callback) {
    callback(value)
    if (/*base case*/) {
        return value;
    }

    for (var i = 0; i < array.length; i++) {

        if (/*conditional*/) {
            var x = /* work + */ value 
            return recursiveCall(x, array, callback);
        }

        .
        .
        .

        if (/*conditional*/) {
            var x = /* work + */ value
            return recursiveCall(x, array, callback);
        }
    }
}

var iters = 0;
var finalValue = recursiveCall(initialValue, array, function(value) {
     if (++iters >= array.length)
         console.log(value);
});

我理解finalValue的值将是未定义的,但它是原始实现的一部分,适用于较小的测试用例。

我只需要能够在最后记录该值。

非常感谢你的帮助!非常感谢!

1 个答案:

答案 0 :(得分:0)

这不是异步流程。你在recursiveCall函数中使用for循环。 for循环使得循环异步的替代是 forloop 一个npm模块https://www.npmjs.com/package/forloop

或者您可以使用

setInterval(recursiveCall(x, array, callback));

而不是

return recursiveCall(x, array, callback); 没有for循环。