首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ethers.js:调用常数方法和等待不起作用

Ethers.js:调用常数方法和等待不起作用
EN

Ethereum用户
提问于 2019-11-09 14:03:25
回答 2查看 1.9K关注 0票数 0

如果我试图通过以下方法获得常数函数调用的结果:

代码语言:javascript
运行
复制
let gameCountAwait = await contract.getGameEntry(0);

它失败了,因为:

未定义的SyntaxError:等待仅在异步函数中有效

然而,如果使用.then,则可以:

代码语言:javascript
运行
复制
let gameCount = contract.getGameEntry(0).then(function(res,err){console.log(res[2]);});
  • Ethers.js版本: 4.0.39
  • 供应商: Metamask
  • 网络: Ropsten

以下是整个代码,以备不时之需:

代码语言:javascript
运行
复制
const ethers = require('ethers');
// The Contract interface
let abi = [
  "event GameResult(bool won)",
  "function lottery(uint8 guess) returns (bool value)",
  "function getGameCount() view returns (uint value)",
  "function getGameEntry(uint index) public view returns(address addr, uint amountBet, uint8 guess, bool winner, uint ethInJackpot)"
];

// Connect to the network
const provider = new ethers.providers.Web3Provider(web3.currentProvider);
let contractAddress = "0x7f8b9483b79f735C34820497A1a7f9FB82C9224b";

let contract = new ethers.Contract(contractAddress, abi, provider);
let gameCount = contract.getGameEntry(0).then(function(res,err){console.log(res[2]);}); //Works!
// let gameCountAwait = await contract.getGameEntry(0); //Does NOT work!
console.log(gameCount);

第一次和Ethers.js玩。希望它是web3.js的有效替代。多谢你们的支持!

EN

回答 2

Ethereum用户

回答已采纳

发布于 2019-11-09 14:36:16

来自MDN

等待操作员用来等待承诺。它只能在异步函数中使用。

如果不想使用async函数,可以尝试:

代码语言:javascript
运行
复制
// ...

let gameCount;
contract.getGameEntry(0).then(function (res, err) {
    gameCount = res[2];
    // ganeCount is only available here
    // to make it available outside, use async/await notation
    console.log(gameCount);
}); 
票数 0
EN

Ethereum用户

发布于 2019-11-09 14:20:07

Ethers.js与您的问题无关。这只是一般的Javascript要求,await只能在异步函数中使用。详情请参见文档

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/77348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档