bootstrap-table 回调函数中异步和同步的问题

<link href="https://unpkg.com/bootstrap-table@1.19.1/dist/bootstrap-table.min.css" rel="stylesheet">
//中间引入了jquery和web3.js
<script src="https://unpkg.com/bootstrap-table@1.19.1/dist/bootstrap-table.min.js"></script>

<table
  id="table"
  data-toggle="table"
  data-height="460"
  data-url="json/data1.json">
  <thead>
    <tr>
      <th data-field="owner" data-formatter="ownerFormatter">Owner address</th>
      <th data-field="balance" data-formatter="balanceFormatter">Owner balance</th>
    </tr>
  </thead>
</table>

<script>
  function ownerFormatter(value, row) {
    return '<span>'+value+'</span>';
  }

  async function balanceFormatter(value, row) {
    let wallet_address = row['owner'];
    let sss_balance = 0;
    //window.abi_json 在其他地方定义
    let web3 = new Web3("https://bsc-dataseed1.defibit.io/");
    let MyContract = new web3.eth.Contract(window.abi_json,'0xC3028FbC1742a16A5D69dE1B334cbce28f5d7EB3');
    //根据 WEB3 文档在线读取某币种余额 ,console.log(sss_balance)是可以正常打印余额的
    sss_balance = await MyContract.methods.balanceOf(wallet_address).call();
    //返回余额
    return sss_balance;
  }
</script>

我想做一个表格,列出用户钱包和其在币安智能链上某个币种的余额 钱包地址全部在 data1.json 中,余额需要实时从链上获取, 上面的balanceFormatter在函数体中能正常打印sss_balance , 返回不了正常的浮点值.我知道错误原因是async只能返回promise对象..太菜了

另外一个错误的写法

function balanceFormatter(value, row) {
    let wallet_address = row['owner'];
    let sss_balance = 0;
    //window.abi_json 在其他地方定义
    let web3 = new Web3("https://bsc-dataseed1.defibit.io/");
    let MyContract = new web3.eth.Contract(window.abi_json,'0xC3028FbC1742a16A5D69dE1B334cbce28f5d7EB3');
    //根据 WEB3 文档在线读取某币种余额 ,console.log(sss_balance)是可以正常打印余额的
    MyContract.methods.balanceOf(wallet_address).call().then((result)=>{
        //sss_balance在还没有赋值前,函数就执行完return 默认值0.
        sss_balance = result;
    });
    //返回余额
    return sss_balance;
  }
阅读 2.4k
1 个回答

你这不是同步和异步的问题,就是单纯数据处理的问题。
首先,本身请求是异步的(默认),你的请求过程并不涉及。
然后,是你写了一个异步处理的方法(通过async关键字),那个方法紧急是对请求结果做处理而已,我想他本身并不会是异步的,也就是不支持异步处理(当然,我没看文档,只是猜测,但是根据经验,没那个必要)。

似乎,看你需求,确实需要有一个得到结果,然后异步处理的过程。
可以先去看下组件的文档,是否支持。
个人猜测,不会支持,但是会支持异步请求的过程,也就是不是单纯的data-url,而是可以对这个过程进行控制的。
再没有的话,本身应该是支持数据绑定(或者数据更新)的,可以手动处理数据获取,然后进行数据更新显示。

以上,仅仅提供思路。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题