¿El resultado de llamar a web3.version.getNetwork() desde el código del lado del navegador siempre está indefinido?

Estoy tratando de obtener la ID de red del objeto Web3 en el lado del cliente (es decir, mientras ejecuta el código Javascript en el navegador). Tengo un código que confirma que el objeto existe y lo hace. Tengo la extensión Metamask instalada y configurada en Chrome. Hice clic en la extensión y definitivamente estoy conectado al cliente de red Ganache (Localhost 8545). Sin embargo, cada vez que llamo, **web3.version.getNetwork()**el resultado es **undefined**. ¿Alguien sabe por qué sucede esto y cómo puedo solucionarlo?

ACTUALIZACIÓN: probé la misma prueba con web3.eth.getAccounts() y eso también vuelve indefinido . Supongo que obtendré el mismo resultado con cualquiera de los métodos/propiedades de Web3 que pruebo.

    // Make sure the Web3.js object has been defined.
    web3_helpers.web3AndMetamaskCheck();

    if (typeof gameDetailsObj == 'undefined' || gameDetailsObj == null)
        throw new Error(errPrefix + 'The game details object is unassigned.');

    if (typeof currentUserObj == 'undefined' || currentUserObj == null)
        throw new Error(errPrefix + 'The current user object is unassigned.');

    // >>>>> getNetworkCall is ALWAYS 'undefined'.          
    var getNetworkCall = web3.version.getNetwork();

Respuestas (1)

Sí, tienes razón, volverá indefinido. Porque web3.version.getNetwork() no es un método de sincronización y no devolverá ningún valor. En javascript, si la función no devuelve ningún método, la variable de inicio no está definida. Consulte el siguiente código para la referencia:

web3.version.getNetwork(function(err, networkId){
            switch(networkId){
                case "1":
                    //TODO your logic...
                    break;
                default:
                    //If neteork id is not mattching...
            }
});