从 JS Promise 计算价值

Calculate Value from JS Promise

我已将回调函数分配给变量。然后函数 return 是一个承诺,说明它已实现和价值。我希望能够 return 该值并用它来执行数学计算。

Javascript代码:

const DollarValue = web3.eth.getBalance(address, (err, balance) =>{
    const EthValue =  web3.utils.fromWei(balance, 'ether')
    TotalEth = parseFloat(EthValue) * 4000;
    return TotalEth;
  
})

console.log(DollarValue);

在控制台中我得到以下输出。

Promise { <state>: "pending" }
​
<state>: "fulfilled"
​
<value>: "338334846022531269"

假设 this 是您正在使用的接口,这是一个异步接口,因此您不能直接 return 函数或其回调的值,因为函数将 return 在该值可用之前很久。你有两个选择。在回调中使用您从中计算出的 balanceTotalEth 值,或者完全跳过回调并使用它 returns.

的承诺

使用普通回调:

web3.eth.getBalance(address, (err, balance) => {
    if (err) {
        console.log(err);
        // do something here upon error
        return;
    }
    const EthValue =  web3.utils.fromWei(balance, 'ether')
    const TotalEth = parseFloat(EthValue) * 4000;
    console.log(TotalEth);
    
    // use TotalEth here, not outside of the callback
  
});

使用 returned 承诺:

web3.eth.getBalance(address).then(balance => {
    const EthValue =  web3.utils.fromWei(balance, 'ether')
    const TotalEth = parseFloat(EthValue) * 4000;
    
    console.log(TotalEth);
    
    // use TotalEth here, not outside of the callback
}).catch(e => {
    console.log(e);
    // handle error here
});

或者,使用 await 和承诺:

async function someFunction() {

    try {
        const balance = await web3.eth.getBalance(address);
        const EthValue =  web3.utils.fromWei(balance, 'ether')
        const TotalEth = parseFloat(EthValue) * 4000;
        
        console.log(TotalEth);
        
        // use TotalEth here, not outside of the callback
    } catch(e) {
        console.log(e);
        // handle error here
    }
}