Web3js
MetaMask Web3 對像不支持沒有回調參數的同步方法
我是新來的,希望能得到一些直覺的幫助。
我寫了一份契約並為它製作了一個 UI,並且使用 ganache-cli 一切正常。但是,現在我已經在 Ropsten 和實際網站上啟動了它,程式碼無法與 MetaMask 一起使用。我做了我的研究並意識到 MetaMask 需要回調參數,但是在嘗試了不同的方法之後,我仍然沒有設法讓它正確。
我的程式碼是:
$("#button1").click(function(resolve, reject) { address = account.toString(); MyContract.function1({from: address, value: '1000000000000000000'}); }) $("#button2").click(function(web3) { address = account.toString(); var spender = $("#useraddress")[0].value; MyContract.function2(spender, "1", {from: address}); }) $("#button3").click(function (web3) { address = account.toString(); var tokenreceiver = $("#newowner")[0].value; MyContract.function3(tokenreceiver, "1", {from: address}); }) $("#button4").click(function(web3) { address = account.toString(); MyContract.function4({from: address, value: '0', gas: >'3000000'}); })
我得到的錯誤是:
未擷取的錯誤:MetaMask Web3 對像不支持沒有回調參數的同步方法,例如 eth_sendTransaction。
我應該如何為上述函式設置回調參數?
PS我是程式新手,所以請原諒可能的程式碼錯誤。
提前致謝。
看看這個解決方案作為您問題的答案。
一般的想法是您正在嘗試進行同步呼叫並期望收到一個承諾。文件非常清楚地解釋它並提供了一個例子。
看看下面的例子:
web3.eth.getBlock(48, function(error, result){ if(!error) console.log(JSON.stringify(result)); else console.error(error); })
解決了。@shanefontaine 的評論,這是主要的幫助來源。至於為什麼在網站載入時會自動呼叫函式,這是我這邊的語法錯誤。JavaScript 函式是自呼叫的,因此會自動呼叫合約函式。按鈕 + 函式的最終程式碼如下所示:
$("#button").click(function(web3) { var tx = MyContract.function(parameter1, parameter2, { from: address, gas: "300000", to: "CONTRACTADDRESS", value: "0", data: "" }, function(err, transactionHash) { if (!err) console.log(transactionHash); }) })
謝謝您的幫助。