繁体   English   中英

在这种情况下如何访问局部变量的值?

[英]How to access a local variable's value in this situation?

我正在尝试读取事件被记录的次数并相应地增加/减少变量。 由于我不能在 getPastEvent 中使用 this.setState(因为它会生成一个未处理的运行时错误,即 TypeError: Cannot read property 'setState' of undefined) ,所以我选择了这种方法,我在本地变量上执行计数然后将其保存到 state 变量中。

这里的问题是当我使用this.setState({totalBidders: biddersnumber}); 在 function 的末尾,我收到的值为零,在我的情况下它应该是两个! 在这种情况下,如何获得 counter biddersnumber的值?

componentDidMount = async () => {
  const accounts = await web3.eth.getAccounts();
  const plasticBaleSC = plasticBaleContract(this.props.address);

  var biddersnumber = 0;
  var highestbid = 0;

  plasticBaleSC.getPastEvents('allEvents', { fromBlock: 0, toBlock: 'latest' }, function (error, events) {
    console.log(events);
    events.forEach(myfunction);

    function myfunction(item, index) {
      if (item.event === 'bidderRegistered') {
        console.log(item);
        biddersnumber++;
        //value is two here
        console.log(biddersnumber);
      } else if (item.event === 'bidPlaced') {
      } else if (item.event === 'bidderRegistered') {
      } else if (item.event === 'bidderExited') {
        console.log(item);
        biddersnumber--;
      } else if (item.event === 'auctionStarted') {
      }
    }
  });

  //Value is zero here
  this.setState({ totalBidders: biddersnumber });
}

您需要将对setState的调用放在回调中:

     // ....
    var highestbid =0;
    const that = this

    // ....

     // Value is two here
     that.setState({totalBidders: biddersnumber});
   });

   //Value is zero here 

};

你需要处理this ,所以把它分配给它that就像它是 2010 一样。

使用对此问题的评论,我进行了以下更新以解决该问题。 谢谢安德里亚!

componentDidMount = async () => {

        const accounts = await web3.eth.getAccounts();
        const plasticBaleSC = plasticBaleContract(this.props.address); 

        var biddersnumber = 0; 
        var highestbid =0;

        plasticBaleSC.getPastEvents("allEvents",{fromBlock: 0, toBlock:'latest'},(error, events)=>{
            console.log(events);

            const myfunction = (item,index) => {

                if(item.event==='bidderRegistered'){
                    console.log(item);
                    biddersnumber++; 
                    console.log(biddersnumber);
                    

                }else if(item.event==='bidPlaced'){


                }else if(item.event==='bidderRegistered'){

                }else if (item.event==='bidderExited'){
                    console.log(item);
                    biddersnumber--;

                }else if(item.event==='auctionStarted'){
                    //console.log(item);
                    //this.setState({highestBid: item.returnValues['startingAmount']});

                }


            };

            events.forEach(myfunction);

            this.setState({totalBidders: biddersnumber});

    });

   
    };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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