如何在异步javascript和web3js中将值返回给调用方函数

时间:2019-03-22 15:29:08

标签: javascript return-value web3js

在下面的示例中,我可以看到hash是从someFunction写入控制台的,但是我无法将r返回到callerFunction。输出为undefined。我如何将h的值返回到callerFunction


async function caller(){
  var val = 10;
  let result = await someFunction(val);
  console.log(result);
}

async function someFunction(val) {
   let r = await contract.methods.updateValue(val).send({from: account})
   .on('transactionHash', function(h){
      console.log(h);
      return h;
   })

   return r; 
}

我尝试了以下几种变体:

版本1

async function someFunction(val) {
   return contract.methods.updateValue(val).send({from: account})
   .on('transactionHash', function(h){
      console.log(h);
      return h;
   })

   return r; 
}

版本2

async function someFunction(val) {
   return r = contract.methods.updateValue(val).send({from: account})
   .on('transactionHash', function(h){
      console.log(h);
      return h;
   })
}

版本3

async function someFunction(val) {

   var result;
   let r = await contract.methods.updateValue(val).send({from: account})
   .on('transactionHash', function(h){
      console.log(h);
      result = h;
   })
   return result;
}

仍然无法正常工作。...

1 个答案:

答案 0 :(得分:0)

最方便的方法是按如下方式使用回调:


async function caller(){
  var val = 10;
  await responder(val, async function(e, res){
    if(res.status === 'success' && res.hash) {
      //do stuff with res.hash
    } else {
      //handle error here 
    }
  })
}

async function responder(val, callback) {
   contract.methods.updateValue(val).send({from: account})
   .on('transactionHash', (hash) => {
      callback(null, {'status': 'success', 'hash': hash});
   })
   .on('error', (e)=> {
        callback(null, {'status': 'error', 'error': e.message})
    })
}