【问题标题】:How do I consume and print a Promise result?如何使用和打印 Promise 结果?
【发布时间】: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


【解决方案1】:

您的意思是return blockNumber; 而不是return blockNumber();

【讨论】:

    猜你喜欢
    • 2017-05-18
    • 2016-05-21
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多