El objeto MetaMask Web3 no admite métodos sincrónicos como personal_newAccount sin un parámetro de devolución de llamada

Estoy usando web3j con una conexión angular 5 que funciona perfectamente y el equilibrio se muestra perfectamente. pero cuando escribo la función de transferencia arroja un error

var tx = this._web3.eth.sendTransaction({ 
  from: this._account,
  gasPrice: "20000000000",
  gas: "21000",
  to: textetheraddress, 
  value: textetheramount,
  data: ""
 }).then(function(err, transactionHash) {
  if (!err)
    console.log(transactionHash); 
});

error

ERROR Error: el objeto MetaMask Web3 no admite métodos sincrónicos como personal_newAccount sin un parámetro de devolución de llamada. Consulte https://github.com/MetaMask/faq/blob/master/DEVELOPERS.md#dizzy-all-async---think-of-metamask-as-a-light-client para obtener más información.

Respuestas (1)

Está intentando realizar una llamada síncrona y espera recibir una promesa.

Probablemente sea exactamente como dice el error:

Por lo general, para hacer que una llamada a un método sea asíncrona, agregue una devolución de llamada como último argumento a un método síncrono. Consulte la wiki de Ethereum sobre "uso de devoluciones de llamada" ( https://github.com/ethereum/wiki/wiki/JavaScript-API#using-callbacks )

Dado que las funciones de sincronización no son compatibles, debe usar la asíncrona.

Así que supongo que en este caso su código necesita pasar una devolución de llamada en lugar de esperar una promesa y debería verse así:

var tx = this._web3.eth.sendTransaction({ 
  from: this._account,
  gasPrice: "20000000000",
  gas: "21000",
  to: textetheraddress, 
  value: textetheramount,
  data: ""
 }, function(err, transactionHash) {
  if (!err)
    console.log(transactionHash); 
})