递归,回调和nodejs

时间:2015-05-27 23:53:06

标签: node.js recursion callback

我对递归,回调和nodejs有很大的问题。

我有这个对象例如:

var a= [
    {index : 1},
    {index : 2},
    {index : [
        {index : 11},
        {index : 12},
        {index : [
            {index : 111},
            {index : 112},
            {index : "end-of-tree"},
        ]},
    ]},
    {index : 4},
]

我想按顺序显示:

1
2
11
12
111
112
end-of-tree
4

使用console.log(value)

在纯JavaScript中,它很容易,但是当节点异步运行时,它会有点复杂。

谁能帮助我?

3 个答案:

答案 0 :(得分:1)

你可以尝试这样简单的事情!

function ff(item){
  var temp = item.index;
  if(temp instanceof Array) temp.forEach(ff);
  else console.log(temp);   
}
a.forEach(ff);

实际上你的问题没有任何异步,它是数组中的同步itteration!

答案 1 :(得分:0)

我设法让它发挥作用。

JSON例子:

var a= [
    {index : 1},
    {index : 2},
    {index : [
        {index : 11},
        {index : 12},
        {index : [
            {index : 111},
            {index : 112},
            {index : "end-of-tree 1xx"},
        ]},
    ]},
    {index : 4},
    {index : [
        {index : 51},
        {index : 52},
        {index : [
            {index : 531},
            {index : 532},
            {index : [
                {index : 5341},
                {index : 5342},
                {index : [
                    {index : 53441},
                    {index : 53442},
                    {index : "end-of-tree 5xx"},
                ]}, 
            ]},
        ]},
    ]},
    {index : 6},
    {index : 7},
    {index : 8},
    {index : 9},    
    {index : [
        {index : 'A0'},
        {index : 'A1'},
        {index : [
            {index : 'A21'},
            {index : 'A22'},
            {index : [
                {index : 'A311'},
                {index : 'A312'},
                {index : [
                    {index : 'A3131'},
                    {index : 'A3132'},
                    {index : "end-of-tree Axx"},
                ]}, 
            ]},
        ]},
    ]}, 
]

Javascript代码:

function tree(json) {
    item=json[0];
    if (item) {
        if (Array.isArray(item.index)) {
            tree(item.index);
        } else {
            console.log(item.index)
            json.shift();
            if (json) tree(json);
        }       
    } else {
        a.shift();
        if (a.length>0) tree(a);
    }
} 

tree(a)

控制台日志结果:

1
2
11
12
111
112
end-of-tree 1xx
4
51
52
531
532
5341
5342
53441
53442
end-of-tree 5xx
6
7
8
9
A0
A1
A21
A22
A311
A312
A3131
A3132
end-of-tree Axx

答案 2 :(得分:0)

@亚历克斯-rocabillis .... https://github.com/oracle/node-oracledb/blob/master/doc/api.md#-523-execute

oracle execute fonction是异步的。 我要创建另一篇文章来解释这个问题。

5.2.3 execute()

原型

void execute(String sql,[Object bindParams,[Object options,]] function(Error error,[Object result]){}); 返回值

描述

此调用执行SQL或PL / SQL语句。有关示例,请参见SQL执行。

这是一个异步调用。

要执行的语句可能包含IN绑定,OUT或IN OUT绑定值或变量,它们使用对象或数组绑定。

回调函数返回一个结果对象,包含任何提取的行,任何OUT和IN OUT绑定变量的值,以及受DML语句执行影响的行数。

参数