递归回调
Recursive callback
所以我正在尝试编写一个函数来获取参数并调用 DynamoDB 的扫描方法,该方法返回分页结果,并且我还从参数中获取limit
作为输入,所以我不想递归调用我的扫描函数来获取所有数据,相反,我想获取尽可能多的数据limit
作为参数传递的数据。我尝试了以下代码块,但似乎我的逻辑不正确!你能帮我做错什么吗?
function scan(params, total, callback) {
dynamo.scan(params, function(err, data) {
if (err) {
callback(err, data);
} else {
if (((!params.Limit || (params.Limit && total.length < params.Limit)))
&& data.Items && data.LastEvaluatedKey) {
params.ExclusiveStartKey = data.LastEvaluatedKey;
(function(data) {
scan(params, data.Items.concat(data.Items), function(err, result) {
data.Items = data.Items.concat(result.Items);
if (result.LastEvaluatedKey)
data.LastEvaluatedKey = result.LastEvaluatedKey;
callback(err, data);
});
} (data));
} else {
callback(err, total); //Here it says undefined is not a function
}
}
});
}
通过以下代码调用:
//params is stuffed with needed parameters for scan method of DynamoDB
scan(params,[],function(err, data){
//Processing data here
})
这是我编写的一些示例代码,让我知道它是否适合您的用例或您有任何问题。
/**
* This method will scan continue to scan until
* 1) There are no more items (LastEvaluatedKey is null)
* 2) We have retrieved N items from paginated scan
* If we find more than N, we take the first N items.
**/
function scanWithItemLimit(params, n, callback, items) {
db.scan(params, function(err, data) {
if (err) {
callback(err);
} else {
var leftover = n - data.Items.length;
var itemsCopy = items ? items : [];
if (leftover > 0) {
itemsCopy = itemsCopy.concat(data.Items);
var paramsCopy = params;
paramsCopy.ExclusiveStartKey = data.LastEvaluatedKey;
if (params.ExclusiveStartKey) {
scanWithItemLimit(paramsCopy, leftover, callback, itemsCopy);
} else {
callback(err, itemsCopy);
}
} else {
if (n != 0) {
for (var i = 0; i < n; i++) {
itemsCopy.push(data.Items[i]);
}
}
callback(err, itemsCopy);
}
}
});
}
var pfunc = function(err, items) { console.log(err, items); };
params = {TableName: "Table"};
scanWithItemLimit(params, 5, pfunc);
相关文章:
- 递归回调
- 带有回调的Javascript对象方法中的递归
- jQuery.fadeIn()和.fadeOut()回调在将代码重写为递归回调后无法正常工作
- 使用回调的递归Javascript函数不起作用
- 递归和传递 Ajax 回调
- 使用递归函数按顺序执行多个 ajax 请求,并在所有请求完成后执行回调函数
- 回调函数中的递归
- 如何"递归AJAX回调”;在JavaScript工作中
- 递归回调机制
- 什么'这是停止递归回调的最佳方法
- backbone.js集合-如何为fetch定义成功回调(不过是递归的)
- 如何在node.js中通过API回调异步递归
- 如何在异步递归方法完全就绪时创建回调
- 在递归函数中不能调用回调函数
- 节点集上的递归回调
- 使用回调来减慢循环的函数在递归使用时会变得混乱
- 对递归函数的回调
- 在非阻塞回调函数中递归调用父函数
- 如何处理节点中的递归回调
- 在javascript中,使用回调函数递归地进行循环控制是很危险的