Search code examples
javascriptnode.jspromisees6-promiseethers.js

How do I consume and print a Promise result?


I'm trying to get the current block number from Binance Smart Chain (BSC). In the documentation, provider.getBlockNumber() returns a Promise object.

Here are my attempts to consume and print the current block number into console. I'm using Node.js v16.5.0 and Ethers.js 5.4.1.

var ethers = require("ethers");
var url = "wss://bsc-ws-node.nariox.org:443";
    
const provider = new ethers.providers.WebSocketProvider(url);

const blockNumber = async function() {
    return await provider.getBlockNumber();
}

console.log(blockNumber());
process.exit();

This returns Promise { <pending> } on the console.

This block of code:

var ethers = require("ethers");
var url = "wss://bsc-ws-node.nariox.org:443";

const provider = new ethers.providers.WebSocketProvider(url);

async function blockNumber() {
    const blockNumber = await provider.getBlockNumber();
    return blockNumber();
}

blockNumber().then(data => {console.log(data)});
process.exit();

output exactly nothing in the console, almost as there's nothing wrong in the code.

Expected output should be a number, like 9380976.

Where did I go wrong?

EDIT 1: Added process.exit() because that's supposed to be in the original post.

ANSWER by @purple:

var ethers = require("ethers");
var url = "wss://bsc-ws-node.nariox.org:443";

const provider = new ethers.providers.WebSocketProvider(url);

async function blockNumber() {
    const blockNumber = await provider.getBlockNumber();
    return blockNumber;
}

blockNumber().then(data => {
    console.log(data)
    process.exit();
});

Result:

> node app
*pauses for a bit, then prints*
9397167
>

Solution

  • Did you mean return blockNumber; instead of return blockNumber();?