2015-01-09 374 views
0

如何在nodejs遍历模块中中断/停止遍历?nodejs遍历(js-traverse)模块:如何'中断'遍历

我正在遍历一个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语句将控制调用(连接)中间件,但横向延续的背景。我没有在文档中找到任何中断/停止选项。错误发生后如何停止遍历?

在此先感谢您的意见。

回答

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(); 
    } 
} 
0

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

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

感谢您的回复,但Traverse(https://www.npmjs.com/package/traverse)没有.some()方法。 – user3190499 2015-01-11 17:09:16