为啥我可以在一个功能中访问我的合同,但不能在另一个功能中访问我的合同

Posted

技术标签:

【中文标题】为啥我可以在一个功能中访问我的合同,但不能在另一个功能中访问我的合同【英文标题】:Why I can access my contract in one function but not another one为什么我可以在一个功能中访问我的合同,但不能在另一个功能中访问我的合同 【发布时间】:2020-07-30 15:13:12 【问题描述】:

如果标题有点混乱,我很抱歉。

我正在开发带有智能合约的以太坊区块链。

App=
 createVoter1: function()
        App.contracts.Voting.deployed().then(function(instance) 
            // use the contract function createBallot
            var college = $("#college1").text();
            var major = $("#major1").text();
            var expirydate = $("#expirydate").text();
            var serialnumber = $("#serialnumber1").text();
            instance.createVoter(web3.eth.accounts[0],major,college,expirydate,serialnumber,"",[]);
        )
    ,
    ifVoterAddressExists: function()
      App.contracts.Voting.deployed().then(function(instance)
        instance.ifVoterAddressExists(web3.eth.accounts[0]);
      )
    

我在 createVoter1 函数之前跳过了一些代码。问题是,createVoter1 函数可以成功使用合约的函数。但是,当我使用 ifVoterAddressExists 时,会出现 Uncaught TypeError: Cannot read property 'deployed' of undefined 的警告。我可以知道是否有任何可能的解决方案?谢谢!

【问题讨论】:

【参考方案1】:

您的代码在部署之外执行。您需要先等待合约部署完成。

【讨论】:

感谢您的回答。您能否进一步解释我如何“等待部署合约”?

以上是关于为啥我可以在一个功能中访问我的合同,但不能在另一个功能中访问我的合同的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 history.push 在一个功能中起作用,而在另一个功能中起作用?

为啥我不能在另一个类中调用公共方法?

执行 Select-AzureRmSubscription 可以从我的一台(客户端)机器上运行,但不能在另一台机器上运行

为啥我可以在 viewDidAppear 中访问 Core Data 实体,但不能在 viewDidLoad 中访问?

为啥 Spring 项目的导出的可运行 JAR 不能在另一个系统中工作?

为啥我可以禁用但不能启用可丢弃功能?