Контракт с трюфелем взаимодействует с асинхронными - PullRequest
0 голосов
/ 19 января 2019

Я использую nodejs v.8.15.0 и truffle v4.1.15. Я развернул контракт, и я также могу взаимодействовать с ним, но не так, как указано на странице трюфелей

Потому что, если я сделаю одно из них:

let accounts = await web3.eth.getAccounts()
let balance = await instance.getBalance(accounts[0])

Я получаю следующую ошибку:

SyntaxError: await действителен только в асинхронной функции

То же самое происходит с использованием пакета truffle-contract, хотя в описании github есть также примеры ES6 :

const deployed = await MyContract.deployed();
const result = await instance.someFunction(5); 

Кто-нибудь знает, почему он не работает, как указано в примерах?

1 Ответ

0 голосов
/ 19 января 2019

Когда вы используете 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

...