Javascript

TypeError:transactionResponse.wait 不是函式 ethers.js

  • June 12, 2022

我有一個契約對象。最重要的是,我正在呼叫 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 的方法。我希望這有幫助

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