Javascript 回调函数中的递归

Javascript 回调函数中的递归,javascript,node.js,recursion,express,Javascript,Node.js,Recursion,Express,我有一个带有回调的函数,其中我使用dynamoDB的“listTables”方法,它只返回100个表名,如果还有表,它会返回另一个名为“LastEvaluatedTableName”的字段,我们可以在listTables中的新查询中使用该字段,从提到的“LastEvaluatedTableName”中查询另外100个表;在这种逻辑中,如何在javascript的回调中实现递归 我尝试了以下不正确的方法: module.exports.ListTables = function (start, c

我有一个带有回调的函数,其中我使用dynamoDB的“listTables”方法,它只返回100个表名,如果还有表,它会返回另一个名为“LastEvaluatedTableName”的字段,我们可以在listTables中的新查询中使用该字段,从提到的“LastEvaluatedTableName”中查询另外100个表;在这种逻辑中,如何在javascript的回调中实现递归

我尝试了以下不正确的方法:

module.exports.ListTables = function (start, callback) {
    var params;
    if (start) {
        params = {
            "ExclusiveStartTableName": start
        };
    }

    dynamodb.listTables(params, function (err, data) {
        var totalData = [];
        totalData.push(data);
        if (data.LastEvaluatedTableName) {
            data = module.exports.ListTables(data.LastEvaluatedTableName);
        }
        callback(err, totalData);

    });
}
请让我知道,如果你需要更多的澄清


谢谢

您需要保存数据,而不是每次都替换:

dynamodb.listTables(params, function (err, data) {
    if (data.LastEvaluatedTableName) {
        data.concat(module.exports.ListTables(data.LastEvaluatedTableName));
    }
    callback(err, data);
});

更新

根据评论中的信息,听起来你需要这样的东西:

module.exports.ListTables = function (start, callback, totalData) {
    var params;
    if (start) {
        params = {
            "ExclusiveStartTableName": start
        };
    }

    if (!totalData) {
        totalData = [];
    }

    dynamodb.listTables(params, function (err, data) {
        totalData = totalData.concat(data.TableNames);
        if (data.LastEvaluatedTableName) {
            module.exports.ListTables(data.LastEvaluatedTableName, callback, totalData);
        }
        else {
            callback(err, totalData);
        }
    });
}

Thansk Some man:-)事实上,来自Dynamo的ListTables的结果就像:{LastEvaluatedTableName:'test100',TableNames:['test1',…]}而且它似乎没有附加结果!不客气!哦,我明白了,你知道如何添加正确的内容吗?它是一个对象,所以它给出了“object”没有方法“concat”,所以我尝试了data.TableNames.concat(module.exports.ListTables(data.LastEvaluatedTableName.TableNames)),这给出了“无法读取未定义的属性‘TableNames’”,逻辑似乎正确,但仍然”无法读取未定义“…该死,凌晨3点…忘记分配concatted数据:
totalData=totalData.concat(data.TableNames);
的属性“TableNames”。没有递归的情况下,该代码也可以正常工作。