我如何将数据从web3.eth.sendSignedTransaction推送到数组

时间:2018-12-20 18:10:04

标签: javascript node.js asynchronous

我想将数据推送到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 :(得分:0)

$query = "Select * from plays where usertype=2 and idgame=$idgame"; $result = mysqli_query(isConnect(),$query); while($row = mysqli_fetch_array($result)); { echo "$row[0]"; } ?> 在这些情况下,您可能可以使用一些异步管理,例如promise,因为使用全局变量不是最佳实践:

how can i run it after then ?

如果要像这样分配它,甚至可以使用async / await来实现它:

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]); });

将此代码包装在异步块中

答案 1 :(得分:0)

这是Java语言中异步编程的问题。

您可以定义用于发送已签名交易的函数,并在收到交易确认时调用回调函数。

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代替回调来完成相同的操作。