Поддержание контекста в асинхронном JS: web3.eth.getBalance () в качестве примера - PullRequest
0 голосов
/ 21 ноября 2018

В настоящее время я работаю с nodejs и web3 и сталкиваюсь с проблемами с асинхронной моделью и, возможно, с конкретной реализацией вызовов web3.Приведенный ниже код предоставит мою конкретную проблему, и я верю, что ответом будет шаблон, который можно использовать в другом месте.

Основной вопрос: как получить баланс с помощью запроса getBalance при сохранении контекста учетной записиза что я спрашивал?

Код для краткости упрощен.

У меня есть список:

var ethAccounts = ['0xabc', '0xdef', '0x123'];

Мой код будет перебирать список, получать баланс каждого и что-то с ним делать.Просто, правда?Я могу использовать getBalance (), используя прототип:

web3.eth.getBalance( account, blockNumber(optional), callback (optional)  )

catch: getBalance - это асинхронный вызов, который возвращает Promise.

var balance = web3.eth.getBalance( ethAccounts[0] );

.. баланс не будет тем, что янужно, когда он вернется.

Официальное руководство:

web3.eth.getBalance("0x407d73d8a49eeb85d32cf465507dd71d507100c1")
.then(console.log);
> "1000000000000"

Мне не нужно значение на консоли, поэтому я создаю функцию для его получения.

web3.eth.getBalance(ethAccounts[0]).then( 
    function( value ) { 
        var balance = value; 

        // In this scope, I *can't see* ethAccounts[0]

        console.log(balance);
    } 
);

В моем функциональном блоке мне нужны и учетная запись и значение.

Возможно, обратный вызов может помочь:

 function testCallback( value1, value2 ) {
     console.log(value1 + ", " + value2 );
 }
 web3.eth.getBalance(ethAccounts[0], undefined, testCallback );

Вывод на консоль будет:

100000000000000000000, undefined

Я пробовал несколько сценариев: добавление параметров в обратный вызов, в функцию-обработчик, пытаясь обмануть обещание с помощью «await».Пока у меня нет ни одного шаблона, с помощью которого я могу сохранить контекст.

Я пропускаю простой Javascript асинхронного шаблона?Как я могу получить баланс в той же области, в которой у меня есть учетная запись в запросе?

Большое спасибо!

...