【发布时间】:2015-10-22 06:19:27
【问题描述】:
我有这个对象树,它表示如下(简化):
var root = [
{ name: 'child1',
data: 'other_data',
children: [ {
name: 'grand_child1',
data: 'other_data',
children: [...]
}, ... ]
},
{ name: 'child2',
data: 'other_data',
children: [ {
name: 'grand_child2',
data: 'other_data',
children: [...]
}, ... ]
}
]
我需要遍历这个对象树并根据子项中提供的数据实例化对象,但是这个过程需要几秒钟,同时它会冻结浏览器。
我需要在循环的迭代之间设置一个超时,以便让浏览器有机会清除事件队列。
我该怎么办?
这就是我目前循环它们的方式,没有超时。我目前正在使用相互递归模式。
function performSingleNodeComputation(node) {
performHeavyComputation(node.data)
if(node.children) {
performMultipleNodeComputation(node.children);
}
}
function performMultipleNodeComputation(nodes) {
nodes.forEach(function (node) {
performSingleNodeComputation(node);
});
}
performMultipleNodeComputation(root);
重申一下,我需要在每次调用 performHeavyComputation 之间设置一个超时时间
【问题讨论】:
-
这篇文章可能会给你一些想法stackoverflow.com/questions/758688/…
标签: javascript recursion rendering settimeout