Compruebe si web3js está conectado al nodo

Tengo una cadena privada con varios nodos. Conectarse a uno solo funciona bien. Sin embargo, si este falla, quiero conectarme a uno de los otros nodos.

Al usar web3js 1.0.0 beta 26, según la documentación, parece que no hay forma de saber si está conectado o no al nodo a menos que intente un tx o una llamada y le diga que falla porque una propiedad de web3 es indefinido.

Así que he estado tratando de "hackearlo" y usar algún truco, pero hasta ahora no he tenido ningún resultado. Establecer un proveedor siempre establecerá su variable web3 en algo, incluso si en realidad no puede conectarse al nodo.

Aquí hay un ejemplo de lo que probé:

function getNode() {
    console.log("getting node");
    for (let i = 0; i <= nodeInfo.length - 1; i++) {
        let web3 = new Web3(new Web3.providers.HttpProvider(nodeInfo[i].ip + ':' + nodeInfo[i].port));
        console.log(web3.currentProvider.connected);
        if (web3.currentProvider.connected) {
            console.log("Provider is: " + web3.currentProvider.connect + " at " + i + " loop");
            return web3;
        }
    }
    return null;
}

También intenté usar devoluciones de llamada, verificando si eth (o cualquier propiedad de web3) no está indefinida o lo que sea, pero no puedo conectarme a otros nodos si el predeterminado está inactivo.

¿Alguien sabe cómo verificar si realmente está conectado a un nodo o no?

Respuestas (1)

Prueba esto, también se vuelve a conectar al nodo. Usando web3js@1.0 beta

web3.eth.net.isListening().then((s) => {
    console.log('We\'re still connected to the node');
}).catch((e) => {
    console.log('Lost connection to the node, reconnecting');
    web3.setProvider(your_provider_here);
})