Как решить обещание с ожиданием правильного? - PullRequest
0 голосов
/ 22 декабря 2018

Может кто-нибудь сказать мне, почему await здесь не работает?

const Web3 = require('web3');

web3 = new Web3(new Web3.providers.HttpProvider("http://<ip>:8545"));

let accounts = (async () => await web3.eth.getAccounts())();

// await was not working, here I get a promise
console.log(accounts);

// if I wait with a timeout I get my accounts
setTimeout(() => console.log(accounts), 5000);

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Так не работает.Асинхронная функция возвращает обещание.console.log вне асинхронной функции не будет ждать ожидания.Вы можете остановить свой код ВНУТРИ асинхронной функции.

async function getData() {
    const answer = await web3.eth.getAccounts()
    console.log(answer) /* this console.log will be wait */
    return answer
}

getData().then(answer => console.log(answer))

Если бы он работал так (удерживая код вне функции), он остановил бы весь процесс в браузере (например, функция оповещения) ипользователю тоже придется подождать.

0 голосов
/ 22 декабря 2018

Ваш console.log должен находиться внутри встроенной асинхронной функции.

(async () => {
   accounts = await web3.eth.getAccounts()
   console.log(accounts);
}
)();
...