Javascript:异步遍历列表的列表
Javascript: Traverse lists of lists asynchronously
我正在尝试遍历一个javascript列表。
目标是将每个项传递给函数并处理它异步。但是它不工作:
var tree = function (data, callback) {
var data_position = 0;
var iterate = function () {
if (data_position<data.length) {
if (Array.isArray(data[data_position])) {
tree(data[data_position], callback);
// If I uncomment these it will show all items but not ordered
//data_position++;
//iterate();
} else {
callback(data[data_position++], iterate);
}
}
}
iterate();
}
tree([1, 2, [100, 200, 300], 3, 4, 5, 6, 7, 8, 9], function (item, iterate) {
setTimeout(function(){
console.log('Item: ' + item);
iterate();
}, 1000);
})
代码在300处停止,而不是处理树的其余部分。
如果我取消上面那两行注释,我可以打印所有项,但是它们不要表现出有秩序。我该如何解决这个问题?
此解决方案使用第二个可选回调,允许子迭代函数tree
向父函数tree
发出信号,以便在子函数完成后继续运行。
按预期运行,每次叶子元素迭代之间延迟1秒。
var tree = function (data, callback, done) {
var data_position = 0;
var iterate = function () {
if (data_position<data.length) {
if (Array.isArray(data[data_position])) {
tree(data[data_position++], callback, function() { iterate(); });
} else {
callback(data[data_position++], iterate);
}
} else if (done) {
done();
}
}
iterate();
};
tree([1, 2, [100, 200, 300], 3, 4, 5, 6, 7, 8, 9], function (item, iterate) {
setTimeout(function(){
console.log('Item: ' + item);
iterate();
}, 1000);
});
应该可以:
var tree = function (data, callback) {
var data_position = 0;
var iterate = function () {
if (data_position<data.length) {
if (Array.isArray(data[data_position])) {
tree(data[data_position], callback);
}
callback(data[data_position++], iterate);
}
}
iterate();
}
tree([1, 2, [100, 200, 300], 3, 4, 5, 6, 7, 8, 9], function (item, iterate) {
setTimeout(function(){
if(!Array.isArray(item)) console.log('Item: ' + item);
iterate();
}, 1000);
})
相关文章:
- Netsuite Suitelet:在不达到治理限制的情况下,遍历事务行项目的列表加载和提交记录
- 通过遍历JSON文件来填充数据列表选项
- javascript循环遍历列表项,并在数组中返回结果
- 遍历对象列表
- 遍历列表,并在jQuery为空时显示消息
- 遍历列表,从列表项文本中添加列表项id
- 循环遍历节点列表 JS
- 是否可以遍历引导程序列表
- 如何遍历项目列表并将其数据值推送到数组中
- Javascript:如何遍历列表以查找活动类
- 使用 Jquery 遍历列表
- 遍历两个列表,从第一个列表中获取值,将它们添加到第二个列表中
- 循环遍历具有空数据的数组列表时出现问题
- 遍历列表并在jquery中选中复选框id
- 循环遍历角度.js数组列表
- 遍历元素列表并隐藏它们
- 使用主干遍历每个JSON记录并显示在列表中
- 如何使用Jquery each()方法遍历列表中的next/PPrevious 3元素
- 循环遍历无序列表并对每个节点执行操作Javascript
- 如何使用for循环循环遍历元素列表并动态设置元素样式