簡體   English   中英

如何在異步javascript和web3js中將值返回給調用函數

[英]how to return value to caller function in asynchronous javascript and web3js

在下面的例子中,我可以看到從someFunction寫入控制台的hash ,但是我無法將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;
}

仍然無法使其工作....

最方便的方法是使用回調如下:


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM