如何选择在Node Js中先调用哪个函数

How to choose which function is called first in Node Js

我目前正在使用 Ether 包和 NodeJS 来学习一些东西。

这是我的代码:

var ethers = require('ethers');
var providers = require('ethers').providers;

var infuraProvider = new providers.InfuraProvider(process.argv[3]);

infuraProvider.getBlockNumber().then(function(blockNumber) {
  console.log("Current block number: " + blockNumber);
});

infuraProvider.getGasPrice().then(function(gasPrice) {
  console.log("Current gas price: " + gasPrice.toString());
});

它基本上是从我的参数中获取网络,然后获取blockNumber和gasPrice。 所以如果 运行 这个,这就是我得到的:

Current block number: 5083149
Current gas price: 8000000000

这就是我想要的。但有时,它会在区块编号之前给出 gas 价格,例如:

Current gas price: 8000000000
Current block number: 5083149

我怎样才能编辑我的代码,让它总是先给出块号?我尝试使用 .then 关键字,但未能成功。

谢谢

您可以这样做:

infuraProvider.getBlockNumber().then(function(blockNumber) {
    console.log("Current block number: " + blockNumber);
    infuraProvider.getGasPrice().then(function(gasPrice) {
        console.log("Current gas price: " + gasPrice.toString()); 
    });
});

否则,您基本上是在竞速这两个 Promise,并且可能无法确定哪个先进行。

或者,在异步函数中,您可以这样做:

var printDetails = async function()
{
    let blockNumber = await infuraProvider.getBlockNumber();
    console.log("Current block number: " + blockNumber);
    let gasPrice = await infuraProvider.getGasPrice();
    console.log("Current gas price: " + gasPrice.toString());
}

printDetails();

试试这个

infuraProvider.getBlockNumber().then(function(blockNumber) {
  console.log("Current block number: " + blockNumber);
  return infuraProvider.getGasPrice();
}).then(function(gasPrice) {
  console.log("Current gas price: " + gasPrice.toString());
});