0
我需要搜索大型JSON文件中的id
并返回所有属性。但是,有一个parentId
属性。这对应于另一个对象,其属性我需要包括的id
,可能另一个parentId
等如何使用承诺继续运行
m.getAttrs = function(o){
var a = []
// get the model based on id or object.id
if(o instanceof String)
var obj = json.models.filter(i => i.id == o)[0]
else
var obj = json.models.filter(i => i.id == o.id)[0]
////// On 2nd iteration: "TypeError: Cannot read property 'hasOwnProperty' of undefined" ///////////////
if(obj.hasOwnProperty("parentId") && obj.parentId != ""){
// get parent id
var pid = obj.parentId
// get parent attributes
a.push(m.getAttrs(pid)) // RECURSION //
}
// get attributes
var attrs = obj.attrids
// get Attribute Names
for(aid in attrs){
var aName = json.attrs.filter(i => i.id == aid)
a.push(aName)
}
return a
}
我看到一个错误其中obj
不getAttrs的第一次迭代后定义。我认为这是因为json.models.filter...
没有完成,但它可能是很多事情。
我已经尝试了许多次实现承诺,但似乎无法获得任何工作,并且它使我的代码太杂乱,因此无法将其包含在此处。
我如何能实现一个承诺,说:“你找到合适的型号后,CONTINUE(而不是执行其它功能)”?
什么是'json.models'?如果它只是一个数组,那么在下一行代码运行之前就完成了('Array.prototype.filter'是同步的)。 –
'json.models'它是一个对象数组。很高兴知道'.filter'是同步的 - 谢谢。所以你说的问题不是异步,它可能与过滤器? –
如果'json.models'是一个数组,你绝对不会得到'TypeError:无法从上面指出的行读取'undefined'属性'hasOwnProperty'。 'obj'将是一个数组(肯定),它具有'hasOwnProperty'。 –