【问题标题】:web3 [object, Promise] error that .then and await does not workweb3 [object, Promise] 错误,.then 和 await 不起作用
【发布时间】:2021-10-01 11:58:46
【问题描述】:
    <script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
...
    <script>
      const web3 = new Web3('https://bsc-dataseed1.binance.org:443');
      const version = web3.version.api;
      const burnAddress = "0x000000000000000000000000000000000000dead";

      //jQuery pull of contractABI from getAddress
      function pullData() {
        getAddress = $('input[name="contractAddress"]').val();
        getJSONString = 'https://api.bscscan.com/api?module=contract&action=getabi&address=' + getAddress + '&apikey' + API_KEY;
        $.getJSON(getJSONString, function(data) {
          contractABI = JSON.parse(data.result);
          //document.getElementById("json").innerHTML = "JSON: " + JSON.stringify(contractABI);
          myContract = new web3.eth.Contract(contractABI, getAddress);
          decimals = tokenContract.methods.decimals().call(); // promise error
          document.getElementById("decimals").innerHTML = "Decimals: " + decimals;

        });
        document.getElementById("addy").innerHTML = "Address: " + getAddress;
       }
     </script>

似乎无论我做什么我都无法获得要填充的数字,并且 JSON.stringify() 也不显示任何内容。

是的,表单输入通过调用 pullData() 传递 然后该地址提取一个 ABI(有效) 我可以创建一个新的合同实例,我可以拉出尽可能多的 [object, Promise],因为

可以处理任何“我的方法”,从阅读文档(也是的,console.log(decimals) 也可以) ,但没有一个在 HTML 中显示过数字。 我确实在这里搜索过,我错过了什么?

上面的代码来自我的香草测试 HTML 页面。

谢谢, 最大流量O2

【问题讨论】:

  • 该代码中没有 then 或 await - 似乎不需要,因为您正在使用 $.getJSON 回调 - 请求中可能有错误 - 您检查过浏览器控制台?
  • 是的,我什至在那些上尝试了 $.ajax,它似乎效果不佳,看起来我得到了我在下面寻找的答案。一段时间后,console.logs 显示的承诺值已解决。

标签: javascript html web3 binance-smart-chain


【解决方案1】:

我对这个 API 了解不多,但我认为你需要改变这个:

decimals = tokenContract.methods.decimals().call(); // promise error
document.getElementById("decimals").innerHTML = "Decimals: " + decimals;

到这样的事情:

tokenContract.methods.decimals().call().then(decimals => {
  document.getElementById("decimals").innerHTML = "Decimals: " + decimals;
});

也许阅读Promise.then() 可能会对您有所帮助。之后,查找 async/await。

【讨论】:

  • 这是一个可靠的答案......我感谢你一百万零一次!
  • 另外感谢 Promise.then() 的链接,我好久没用过 JS了。
  • 没问题!真高兴你做到了。如今,通过 async/await 更容易使用 Promise,但在我看来,使用 .then() 是这次获得解决方案的最短方法。
猜你喜欢
  • 1970-01-01
  • 2019-08-17
  • 2016-02-09
  • 2019-06-23
  • 2019-07-27
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多