nodejs Traverse(js-traverse)模块:如何“中断”遍历

时间:2015-01-09 20:49:48

标签: node.js traversal

如何在nodejs遍历模块中中断/停止遍历?

我正在穿越一个json并且在某种情况下,我想停止遍历。

traverse(req.body).forEach(function (xnode) { log.info("Inspecting node: "+xnode); ... ... //If JSON Threat is detected, return error if(Object.keys(err).length > 0){ return next(new Error(JSON.stringify(err))); //traversing should halt here but it continues //DO I need to explicitly break it? } });

在调试期间,我观察到return语句将控制权发送到调用(connect)中间件,但遍历在后台继续。我没有在文档中找到任何中断/停止选项。发生错误后如何停止遍历?

提前感谢您的意见。

2 个答案:

答案 0 :(得分:0)

您可以使用.some代替.forEach。这将循环,但只要您返回true,它就会停止循环。

if (Object.keys(err).length > 0) {
    next(new Error(JSON.stringify(err));
    return true;
}
return false;

答案 1 :(得分:0)

原来在遍历模块中有this.stop()方法停止遍历对象。虽然模块文档中未提及此方法。

traverse(obj).forEach(function (x) {
    console.log("key: "+this.key+"\tValue: "+x+"\tLevel: "+this.level);
    if(this.key==='b'){
        console.log("Halting Traversal: "+this.key+" value: "+x);
        this.stop();
    }
 }