<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;
}
你这不是同步和异步的问题,就是单纯数据处理的问题。
首先,本身请求是异步的(默认),你的请求过程并不涉及。
然后,是你写了一个异步处理的方法(通过async关键字),那个方法紧急是对请求结果做处理而已,我想他本身并不会是异步的,也就是不支持异步处理(当然,我没看文档,只是猜测,但是根据经验,没那个必要)。
似乎,看你需求,确实需要有一个得到结果,然后异步处理的过程。
可以先去看下组件的文档,是否支持。
个人猜测,不会支持,但是会支持异步请求的过程,也就是不是单纯的data-url,而是可以对这个过程进行控制的。
再没有的话,本身应该是支持数据绑定(或者数据更新)的,可以手动处理数据获取,然后进行数据更新显示。
以上,仅仅提供思路。