Javascript
TypeError:transactionResponse.wait 不是函式 ethers.js
我有一個契約對象。最重要的是,我正在呼叫 store() 函式。
const transactionResponse = contract.store(“4”);
常量 txReceipt = transactionResponse.wait(1);
低於錯誤:
TypeError:transactionResponse.wait 不是函式
看起來控制已經跳到行 transactionResponse.wait(1) 而不等待來自 contract.store(“4”); 的響應。
使用 await 鍵,它會工作。
const transactionResponse = await contract.store(“4”);
常量 txReceipt = transactionResponse.wait(1);
呼叫合約上的方法會返回一個承諾,就像等待方法一樣。在上面的範例中,您無需等待承諾解決。有幾種方法可以做到這一點。其中之一是使用 async/await 語法。
async function handleStore() { const transactionResponse = await contract.store('4') const transactionReceipt = await transactionResponse.wait() return transactionReceipt }
請注意,等待函式也不接受任何參數。
您在合約上呼叫的大多數(如果不是全部)方法都將返回您需要等待的承諾。protip:如果你使用vscode,你可以將滑鼠懸停在方法上並查看它的返回值。當您看到關鍵字“promise”時,您肯定會知道您需要等待或承諾鏈。
另一種方法是使用老式的承諾鏈方法。Async/Await 真的只是一種花哨的、更容易閱讀的方式來做一個 Promise 鏈。像這樣
contract.store(4).then(transactionResponse => { transactionResponse.wait().then(receipt => { // do something with the receipt here. }) })
再次注意,
wait()
不需要任何參數。我也應該提一下,並不是所有的合約方法都是交易!小心不要嘗試使用
wait()
不是 tx 的方法。我希望這有幫助