我正在使用nodejs
v.8.15.0和truffle
v4.1.15。我已经部署了合同,也可以与它进行交互,但是不能按照truffles page
因为我执行以下其中一项操作:
let accounts = await web3.eth.getAccounts()
let balance = await instance.getBalance(accounts[0])
我收到以下错误:
SyntaxError:等待仅在异步功能中有效
使用软件包truffle-contract
也会发生同样的情况,即使github description中也有ES6示例:
const deployed = await MyContract.deployed();
const result = await instance.someFunction(5);
有人知道为什么它不能如示例中所述吗?
答案 0 :(得分:3)
使用await时,执行代码的功能应标记为异步,例如:
async function _your_function_name() {
...
let accounts = await web3.eth.getAccounts()
let balance = await instance.getBalance(accounts[0])
...
}
您可能还考虑使用异步IIFE来避免将整个功能标记为异步,即使我错过这样做的充分理由也是如此:
...
let accounts
let balance
(async () => {
accounts = await web3.eth.getAccounts()
balance = await instance.getBalance(accounts[0])
})()
...
这里有更详细的说明:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function