【问题标题】:Async Constructor Javascript异步构造函数 Javascript
【发布时间】:2014-10-28 05:37:35
【问题描述】:

在继承下,当子对象扩展父对象时,需要先构造父对象,然后才能创建子对象。

但是,父构造函数的属性之一是异步(webSQL 数据库事务)。我想将数据库事务对象共享给它的所有孩子。

但是问题是子级不能立即使用事务对象,因为它是在父级创建之后的一段时间后异步创建的。

家长:

    if(this.database = common.model.connections.Sync.getConnection()) {
        this.database.transaction(function(transaction){
            self.transaction = transaction;
        });
    }

请告知或向我询问更多详细信息。会欣赏任何设计模式。

【问题讨论】:

  • 不确定我是否完全理解您的问题,但我认为您正在寻找 Promises:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 感谢@NickDugger 的尝试,它对我来说是新的,但由于它不能跨浏览器工作,所以无法使用,但它似乎与我的想法相似。即在构造函数中将子对象的回调方法(比如说启动)传递给父对象,然后父对象将在创建异步属性(数据库事务)后调用回调。
  • Promises 有 polyfills。我强烈建议你试一试
  • 我从我的简短研究中了解到,这是为了减少回调的嵌套并使代码更有条理,但我觉得我的问题与架构相关,即使你忘记了我们在javascript,假设一个父级的属性get是异步创建的,所以基本上child没有完全完整,这也意味着父级必须知道孩子。
  • 在构造函数中执行数据库操作对我来说看起来很奇怪。

标签: javascript design-patterns asynchronous architecture web-sql


【解决方案1】:

不明确支持异步构造函数。但是,有一个直截了当的解决方案:如果不能将对象放入 Promise 中,则将 Promise 放入对象中。在实践中,这被证明是一个更好的解决方案,因为您可以在任何有对象引用的地方检查分辨率状态,而不仅仅是在构造点。

请参考我对相关问题的回答。

async constructor functions in TypeScript?

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 2012-08-05
    • 2013-12-27
    • 2018-06-26
    • 1970-01-01
    • 2017-04-14
    • 2011-12-30
    • 2017-09-11
    相关资源
    最近更新 更多