繁体   English   中英

如何使用诺言继续操作

[英]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,但是似乎无法使任何工作正常进行,这使我的代码太乱了,以至于我不想在这里包含它。

我如何实现承诺:“找到正确的模型后, 继续 (而不是执行其他功能)”?

这是我发现的...

  • 根据Jamiec的说法, 不可能使用诺言来继续正常运行 尽管似乎发电机可以完成此任务,但我对它们并不熟悉。
  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM