回调函数中的递归

recursive in callback functions

本文关键字:递归 函数 回调      更新时间:2023-09-26

我有一个带回调的函数,我正在使用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);
        }
    });
}