Javascript:如何并行执行同步操作

时间:2017-11-08 09:31:48

标签: javascript json node.js

以下是我编写的非递归js代码,用于遍历json对象并对其执行操作。

//function to disallow property for any node if required
function disallowAdditionalProperties(node) {
    //console.log('working on '+JSON.stringify(node))
    if (typeof node === 'object') {
        if (node.properties) {
            //console.log('has properties')
            node.additionalProperties = false
        }
    }
}

//function to walk trhough all json nodes and perform any action on it
function jsonWalkAction (json,action) {
    //console.log('prior schema');
    //console.log(json)
    var node = json;
    var rootName = 'root';
    var hrchy = {'root':{}};
    var nodeKeys = Object.keys(node);
    var attrib;
    var  i = 0;
    if (nodeKeys.length>0) {
        action(node)
        do {
            attrib = nodeKeys[i++];
            //console.log("attrib: "+attrib);
            if (attrib && typeof node[attrib] === "object") {

                //capture current node info
                hrchy[rootName].pos = i;
                hrchy[rootName].ref = node;
                //initiate next node traversal
                i = 0;
                hrchy[attrib] = {};
                hrchy[attrib].parent = rootName;
                node = node[attrib];

                //perform action on this node
                action(node);

                //update 
                hrchy[attrib].ref = node;
                nodeKeys = Object.keys(node);
                rootName = attrib;
            }
            //check if no more attributes remain for this node
            while (i>=Object.keys(node).length) {
                //break if already on root node
                if (rootName === 'root') break;
                //switch to parent
                prevName = rootName;
                rootName = hrchy[rootName].parent;
                hrchy[rootName].ref[prevName]=node;
                node = hrchy[rootName].ref;
                nodeKeys = Object.keys(node);
                i = hrchy[rootName].pos;
            }


        } while (Object.keys(node).length > i);
    }
}

现在如果我必须对每个选择执行同步操作而不是仅添加错误的附加属性标志 - 如何并行执行每个同步调用,即每个节点操作在javascript中的单独线程中。一个例子可能是每个节点都加载了数据,代码对其进行了密集解析。

0 个答案:

没有答案