Web3js

MetaMask Web3 對像不支持沒有回調參數的同步方法

  • August 17, 2018

我是新來的,希望能得到一些直覺的幫助。

我寫了一份契約並為它製作了一個 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);    
}) })

謝謝您的幫助。

引用自:https://ethereum.stackexchange.com/questions/56700