Web3js
無法使用 web3 獲取資訊:web3.eth.getAccounts 返回未定義
我正在嘗試通過 web3 和 metamask 連接到區塊鏈,並且該
web3.eth.getAccounts()
方法正在返回**undefined
**,但是window.ethereum.request({ method: 'eth_requestAccounts' })
返回一個包含帳戶的數組。這是我的程式碼:
const getWeb3 = () : Promise<Web3> => new Promise<Web3>((resolve, reject) => { // Wait for loading completion to avoid race conditions with web3 injection timing. window.addEventListener("load", async () => { // Modern dapp browsers... if (window.ethereum) { const web3 = new Web3(window.ethereum); try { // Request account access if needed const test = await window.ethereum.request({ method: 'eth_requestAccounts' }); console.log(test)// ["0x3b6f82ad02bf6820fe7062ae08817f54467bfb2a"] const accounts = await web3.eth.getAccounts(); console.log(accounts) // undefined resolve(web3); } catch (error) { reject("User denied account access. " + error); console.log("User denied account access. " + error) } } // Legacy dapp browsers... else if (window.web3) { // Use Mist/MetaMask's provider. const web3 = window.web3; console.log("Injected web3 detected."); resolve(web3); } // Fallback to localhost; use dev console port by default... else { const provider = new Web3.providers.HttpProvider( "http://127.0.0.1:8545" ); const web3 = new Web3(provider); console.log("No web3 instance injected, using Local web3."); resolve(web3); } }); });
我需要在另一個文件中使用已解析的 web3,但現在我嘗試訪問的所有內容都返回未定義,例如
await web3.eth.net.getId();
.
我最終通過更改 web3 的版本解決了這個錯誤**,**我在0.20.x版本中,並將其更改為最新版本,即 1.4.0。
不要使用
web3.eth.getAccounts()
這已被棄用。舊版 dapp 瀏覽器和錢包的庫中可能仍支持它,但建議使用下面的新 web3 方法。
新版Web3推薦使用
web3.eth.requestAccounts()
您已聲明的地方
const test = await window.ethereum.request({ method: 'eth_requestAccounts' });
這不是 web3 方法,雖然它可用於使用使用者帳戶載入您的 dapp,但它可能不適用於所有 dapp 瀏覽器和錢包,尤其是較舊的瀏覽器和錢包。
你關於未定義的最後陳述
web3.eth.net.getId()
這是不正確的。 而是與Try
net
分開。eth
web3.net.getId()
此外,如果該函式需要向區塊鏈查詢數據,該函式應該是非同步的或與回調一起使用。
希望這會有所幫助!
- @雜湊指南