2015-01-09 92 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