我当前正在进行lambda扫描,需要扫描当前大于1mb(单次扫描的大小限制)的表。但是,根据我目前的经验,我无法为重复性操作重写代码。 这是当前通话:
const params = {
TableName: 'product',
};
let items = []
try {
const result = await dynamoDbLib.call("scan", params);
items = result.Items;
if (result.LastEvaluatedKey) {
params.ExclusiveStartKey = result.LastEvaluatedKey;
const newResult = await dynamoDbLib.call("scan", params);
items.concat(newResult.Items)
}
callback(null, success(items));
} catch (e) {
callback(null, failure({ status: false }));
}
因此它会触发两次,但是应该继续进行直到未定义最后一个键。任何帮助将非常感激!
问候布拉姆
答案 0 :(得分:0)
创建一个recursive function,该{{3}}在未定义LastEvaluatedKey
时将停止。它将继续收集扫描结果,直到未定义LastEvaluatedKey,然后它将返回扫描结果。
async function scanTillEnd(params, items){
const result = await dynamoDbLib.call("scan", params);
items.concat(result.Items)
//check if they are more items to get
if (result.LastEvaluatedKey) {
params.ExclusiveStartKey = result.LastEvaluatedKey;
//scan the table again
return await scanTillEnd(params, items)
}
else
//have scanned till the end, return the results
return items
}
const params = {
TableName: 'product',
};
let items = []
let results = scanTillEnd(params,items)