在异步JS中维护上下文:以web3.eth.getBalance()为例

时间:2018-11-20 21:53:22

标签: javascript node.js asynchronous ethereum web3

我目前正在使用nodejs和web3,并且遇到异步模型以及web3调用的特定实现方面的问题。下面的代码将提供我的具体问题,我相信答案将是可以在其他地方使用的模式。

核心问题:如何在保留所查询帐户上下文的同时使用getBalance请求获得余额?

为简化起见,代码简化。

我有一个列表:

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

我的代码将遍历列表,获取每个列表的平衡并对其进行处理。简单吧?我可以使用原型为:

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

收获: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?如何在与请求中拥有帐户相同的范围内接收余额?

非常感谢!

0 个答案:

没有答案