问题描述
我开始学习以太坊和web3js,并注意到Web3js上的某些功能是异步的。我要实现的是获取钱包的帐户余额并将数据用于其他用途。我的下面的代码
I started learning ethereum and web3js and noticed some functions on Web3js are asynchronous. What i want to achieve is get the account balance of a wallet and use the data for something else. My code below
function getAccountBalance2(address){
var wei, balance
//address = document.getElementById("addy").value
return new Promise(function(resolve, reject){
web3.eth.getBalance(address, function(error, wei){
if(error){
console.log("Error with address");
}else{
var balance = web3.fromWei(wei, "ether");
var bal = resolve(balance);
//console.log(bal);
console.log(balance.toNumber());
return balance.toNumber();
}
});
});
}
而我试图在下面的此函数中使用返回值
and i am trying to use the returned value in this function below
function interTransfer(){
var from, to, amount, fromWallet, toWallet
from = document.getElementById("from").value
to = document.getElementById("to").value
amount = document.getElementById("amount").value
if(isWalletValid(from) && isWalletValid(to)){
fromWallet = getAccountBalance2(from);
toWallet = getAccountBalance2(to);
}else{
console.log("Something is wrong")
}
console.log(fromWallet + " "+ toWallet)
}
输出
如何获取实际值并在 interTransfer()函数
How do i get the actual value and use it in the
interTransfer()
function
推荐答案
您需要等待承诺的值。您可以使用另一个
然后
调用,并且-为避免一个请求不得不等待上一个请求完成-- Promise.all
:
You need to await the promised values. You can do this with another
then
call, and -- to avoid one request having to wait for the previous one to finish -- Promise.all
:
function interTransfer(){
// ...
promise = Promise.all([getAccountBalance2(from), getAccountBalance2(to)])
.then(function ([fromWallet, toWallet]) {
console.log('from wallet', fromWallet, 'to wallet', toWallet);
});
// ...
return promise; // the caller will also need to await this if it needs the values
}
,或者,并带有
async
函数和 await
关键字:
Or, with an
async
function and the await
keyword:
function async interTransfer(){
// ...
[fromWallet, toWallet] =
await Promise.all([getAccountBalance2(from), getAccountBalance2(to)]);
console.log('from wallet', fromWallet, 'to wallet', toWallet);
// ...
return [fromWallet, toWallet]; // caller's promise now resolves with these values
}
请注意,<$ c $
是没有用的,您可能应该使用以下命令调用 getBalance
回调中的c> return reject
if(error)
的原因。
Note that the return
in the getBalance
callback is useless, and you should probably call reject
with a reason in the case of if(error)
.
这篇关于如何从“承诺”获得价值。目的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!