Abrufen des Kontostands des Metamask-Kontos mit fromWei

Verwendung von Web3-Javascript-Code, um den Kontostand des ausgewählten Kontos in Metamask abzurufen und in HTML anzuzeigen,

web3.eth.getCoinbase(function(err, account) {
  if (err === null) { 
    App.account = account;
    $("#account").text(account);
    web3.eth.getBalance(account, function(err, balance) {
      if (err === null) {
        $("#accountBalance").text(web3.fromWei(balance, "ether") + " ETH");
      }
    });
  }
});

und jetzt verwende ich angle 4 und versuche, den obigen Code in Typoskript zu konvertieren.

const Web3 = require('web3');
const contract = require('truffle-contract');
const myBettingArtifact = 
require('../../../build/contracts/Test.json');
declare var window: any;
...
account: any;
accounts: any;
web3: any;
balance: number;

this.web3.eth.getAccounts((err, accs) => {      
  if (err != null || accs.length === 0) {
    return;
  }
  this.accounts = accs;
  this.account = this.accounts[0];

  this.web3.eth.getBalance(this.account, function(err, balance) {
    this.balance = this.web3.fromWei(balance, "ether") + " ETH"        
  });
}); 

Allerdings bekomme ich einen Fehler

Uncaught TypeError: Eigenschaft „fromWei“ von undefined kann nicht gelesen werden

Was ist hier das Problem?

Antworten (2)

Anscheinend thisist dies in der anonymen Callback-Funktion, an die Sie übergeben, nicht dasselbe getBalance. Versuchen Sie, es durch eine fette Pfeilfunktion zu ersetzen , die den äußeren thisWert an den inneren Bereich bindet.

this.web3.eth.getBalance(this.account, (err, balance) => {
  this.balance = this.web3.fromWei(balance, "ether") + " ETH"
});
könnten Sie mehr Code bereitstellen? Ich bekomme immer nil/null für accountvariable
@VyachaslavGerchicov Der Code, den ich gepostet habe, stammt von OP. Betreibst du eine Ganache oder einen TestrPC? Sie benötigen einen Knoten mit Konten.
@martriay ganache funktioniert - es zeigt eine Liste von Brieftaschen, die ich verwenden kann. Der Weg funktioniert also. Aber was tun mit Metamask? Es zeigt auch eine Kontoadresse, aber der obige Code hat keinen Zugriff darauf
Ich kann web3 nicht in Angular 5 installieren

web3.eth.getBalance(this.userWalletAddress, (err, balance) => { this.userBalance = web3.utils.fromWei (balance, "ether") + " ETH" });