首页 > 解决方案 > web3.js 中的连接超时

问题描述

实例化 Web3 实例时,我可以传递提供程序选项,包括超时,例如:

const w3 = new Web3(new Web3.providers.HttpProvider('...', {timeout: 10e3}));

isListening但是,当我尝试连接到不健康的节点并检查它是否正在侦听时,它似乎不会影响呼叫:

await w3.eth.net.isListening();

正在等待超过我指定的超时时间。

为什么会这样?我怎样才能在那里强制超时?

标签: node.jsethereumweb3web3js

解决方案


您可以使用Promise.race()来获得与超时相关的第二个承诺。

await Promise.race([
    web3.eth.net.isListening(),
    new Promise(function(resolve, reject) {
        setTimeout(function() {
            reject("Time out");
        }, 10e3);
    })
]);

推荐阅读