Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:异步遍历列表的列表_Javascript_Asynchronous_Recursion_Tree - Fatal编程技术网

Javascript:异步遍历列表的列表

Javascript:异步遍历列表的列表,javascript,asynchronous,recursion,tree,Javascript,Asynchronous,Recursion,Tree,我正在尝试遍历一个javascript列表 目标是将每个项传递到函数中并对其进行处理 异步的。但是它不起作用: var tree = function (data, callback) { var data_position = 0; var iterate = function () { if (data_position<data.length) { if (Array.isArray(data[data_position]

我正在尝试遍历一个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);
})
var-tree=函数(数据,回调){
var数据_位置=0;
var iterate=函数(){
如果(数据位置这应该有效:

var-tree=函数(数据,回调){
var数据_位置=0;
var iterate=函数(){

if(data_position此解决方案使用第二个可选回调函数,该函数允许子迭代函数
发出信号,指示父级
在子级完成后继续运行

它按预期运行,每个叶元素迭代之间有1秒的延迟

var tree=function(数据、回调、完成){
var数据_位置=0;
var iterate=函数(){

if(data_position)如果是数组,您将错过data_position++,请尝试以下操作:tree(data[data_position++],callback);仍然不工作,在300处中断谢谢。不幸的是,虽然它显示所有数字,但它将同时显示200和3以及300和4,不考虑超时。当然,它同时显示200和3以及300和4,因为数组是在同一时间迭代的。