[英]How to use promises to continue operation
我需要在一个大型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...
尚未完成,但是可能有很多事情。
我已经尝试了很多次来实现Promise,但是似乎无法使任何工作正常进行,这使我的代码太乱了,以至于我不想在这里包含它。
我如何实现承诺:“找到正确的模型后, 继续 (而不是执行其他功能)”?
这是我发现的...
Array.prototype.filter
是同步的,因此我的问题不是与异步有关的。 事实证明,除非您专门创建一个String变量,否则instanceof String
不起作用。 这是我发现可以提供帮助的帖子: 为什么instanceof对某些文字返回false? 这修复了我的代码:
if(typeof o === "string")
var obj = json.models.filter(i => i.id == o)[0]
else
var obj = json.models.filter(i => i.id == o.id)[0]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.