Результат вызова web3.version.getNetwork() из кода на стороне браузера всегда не определен?

Я пытаюсь получить идентификатор сети из объекта Web3 на стороне клиента (т.е. при запуске кода Javascript в браузере). У меня есть код, который подтверждает, что объект существует, и он существует. У меня установлено и настроено расширение Metamask в Chrome. Я нажал на расширение, и я определенно подключен к сетевому клиенту Ganache (Localhost 8545). Однако каждый раз, когда я звоню, **web3.version.getNetwork()**результат **undefined**. Кто-нибудь знает, почему это происходит и как я могу это исправить?

ОБНОВЛЕНИЕ: я попробовал тот же тест с web3.eth.getAccounts() , и он тоже возвращается undefined . Я предполагаю, что получу тот же результат с любым из методов/свойств Web3, которые я попробую.

    // 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();

Ответы (1)

Да, ваше право вернет undefined. Поскольку web3.version.getNetwork() не является методом синхронизации и не возвращает никакого значения. В javascript, если функция не возвращает какой-либо метод, она будет инициализировать переменную undefined. См. ниже код для ссылки:

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