Node.js 对象迭代和在nodejs中引发异常
刚从nodejs开始,来自Python世界。对象迭代看起来不像Python中那样直观。我有一个复杂的dictionary对象,它面临两个挑战:Node.js 对象迭代和在nodejs中引发异常,node.js,Node.js,刚从nodejs开始,来自Python世界。对象迭代看起来不像Python中那样直观。我有一个复杂的dictionary对象,它面临两个挑战: 如果在处理过程中的任何时候我没有找到所需的键(而不是允许nodejs添加“undefined”),我想抛出一个异常和bail。有没有一种方法可以做到这一点,而不需要一堆假设。e、 g path = dict.url.path //if url or path are not present, throw exception //more nested
path = dict.url.path //if url or path are not present, throw exception
//more nested dict/array looping
dict['values'].forEach(value => {
value['items'].forEach(item => {
...
});
});
value => {
value['items'].forEach(item => {
...
});
}
上面是一个函数,您可以将其设置为变量
编辑:如果你想为问题1抛出一个异常
try {
path = dict.url.path;
if (!path) {
throw new Error('no path');
}
// some other codes
} catch (err) {
console.error('dict or url is undefined!', err);
}
从你问题的第一部分开始。如果您使用的是node v8+,则可以使用
Proxy
来完成此任务
const strictAccess=obj=>新代理(obj{
获取(目标、属性){
如果(!Reflect.has(目标,属性)){
抛出新错误(`对象没有属性${property}.`)
}
const value=Reflect.get(目标,属性)
返回值的类型=='object'?strictAccess(值):值
}
})
const dict=strictAccess({
网址:{
路径:“路径值”
}
})
试一试{
不动产
}捕获(e){
console.log(e.message)
}
试一试{
dict.url.missingProperty
}捕获(e){
console.log(e.message)
}
console.log(dict.url.path)
最好将其分为两个独立的问题。第一个问题与之相反,“如果在处理过程中的任何时候我没有找到所需的密钥,我想抛出一个异常并退出”没有问题。但是如果dict.url
没有path
w/o ifs,我看不出你的代码会抛出什么。谢谢,这当然有帮助。但是try/catch适用于内部密钥。如果最后一个键未定义(如path),它将通过。@LazyGetter您必须手动处理它。我已经更新了我的answer@ZeroCho你不需要代理。
try {
path = dict.url.path;
if (!path) {
throw new Error('no path');
}
// some other codes
} catch (err) {
console.error('dict or url is undefined!', err);
}