Как я могу отправить данные за пределы web3.eth.sendSignedTransaction в массив - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу отправить данные за пределы web3.eth.sendSignedTransaction, как правильно сделать что-то вроде этого:

let somearray = [];

  web3.eth.sendSignedTransaction('0x'+transaction.serialize().toString('hex'))
            .on('transactionHash',function(hash){
               console.log("thash: " + hash);
            }).on('confirmation', (confirmationNumber) => {

              console.log('transferToReceiver confirmation: ' + confirmationNumber);
              if(confirmationNumber == 1){

                somearray.push("Transaction Confirmed");

              }

            });
console.log(somearray[0]);

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Эта проблема связана с асинхронным программированием в Javascript.

Вы можете определить функцию для отправки подписанной транзакции и вызвать функцию обратного вызова при получении подтверждения транзакции.

function sendSignedTransaction(rawTx, callback) {
    web3.eth.sendSignedTransaction(rawTx)
        .on('transactionHash', (transactionHash) => {
            console.log("TX Hash: " + transactionHash);
        })
        .on('confirmation', (confirmationNumber) => {
            if(confirmationNumber == 1){
                callback("Transaction Confirmed");
            }
        })
        .on('error', console.error);
}

let somearray = [];
sendSignedTransaction(raw, function(confirmedMessage) {
    somearray.push(confirmedMessage);
    console.log(somearray[0]);
});

Вы также можете выполнить то же самое, используя async / await вместо обратных вызовов.

0 голосов
/ 20 декабря 2018

how can i run it after then ? В этих случаях вы, возможно, можете использовать некоторое асинхронное управление, например, обещание, потому что использование глобальных переменных не рекомендуется:

function Transaction() {

  return new Promise((resolve, reject) => {
     let somearray = [];

web3.eth.sendSignedTransaction('0x'+transaction.serialize().toString('hex'))
        .on('transactionHash',function(hash){
           console.log("thash: " + hash);
        }).on('confirmation', (confirmationNumber) => {

        console.log('transferToReceiver confirmation: ' + confirmationNumber);
          if(confirmationNumber == 1){
            somearray.push("Transaction Confirmed");
            resolve(somearray)
          }

        });
  });

}

Transaction().then(result => { console.log('results:', result[0]); });

Вы даже можете реализовать его с помощьюasync / await, если вы хотите назначить его следующим образом:

const results = await Transaction();

, оборачивая этот код в асинхронный блок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...