【发布时间】:2021-09-30 05:18:46
【问题描述】:
我正在尝试从币安智能链 (BSC) 获取当前区块号。 在documentation 中,provider.getBlockNumber() 返回一个 Promise 对象。
这是我尝试使用当前块号并将其打印到控制台中。 我正在使用 Node.js v16.5.0 和 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();
这会在控制台上返回Promise { <pending> }。
这段代码:
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();
在控制台中完全不输出任何内容,几乎就像代码中没有任何错误一样。
预期输出应该是一个数字,例如 9380976。
我哪里做错了?
编辑 1:添加了 process.exit(),因为它应该在原始帖子中。
@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();
});
结果:
> node app
*pauses for a bit, then prints*
9397167
>
【问题讨论】:
-
您使用
.then()或await从承诺中获取价值。对于任何async函数的返回值仍然如此,因为async函数总是返回一个承诺。仅供参考,return await provider.getBlockNumber();没有为您提供比return provider.getBlockNumber();更有用的东西。无论哪种方式,async函数仍会返回一个承诺。
标签: javascript node.js promise es6-promise ethers.js