首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将web3.eth.sendSignedTransaction之外的数据推送到数组

如何将web3.eth.sendSignedTransaction之外的数据推送到数组
EN

Stack Overflow用户
提问于 2018-12-21 02:10:04
回答 2查看 383关注 0票数 0

我想将数据推送到web3.eth.sendSignedTransaction之外,这样做的正确方式是什么:

代码语言:javascript
复制
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]);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-21 02:43:37

这是Javascript中异步编程的一个问题。

您可以定义一个函数来发送已签名的事务,并在收到事务确认时调用回调函数。

代码语言: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
EN

Stack Overflow用户

发布于 2018-12-21 02:34:42

how can i run it after then ?在这些情况下,您可能可以使用一些异步管理,例如promise,因为使用全局变量不是最佳实践:

代码语言:javascript
复制
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来实现它:

代码语言:javascript
复制
const results = await Transaction();

将此代码包装在异步块中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53873982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档