Blockchain

ethers.js 等待函式在第一個函式工作後執行

  • April 6, 2022

我正在使用兩個契約。合約 B 具有從使用者那裡接收 100 個 Dai 代幣的功能,但為此它需要具有該 Dai 代幣的 Dai 合約(合約 A)的 increaseAllowance()。

然後我使用 ethers 在 reactjs 中創建以下函式。它的作用是,它從前兩行的兩個合約中獲取 abi,​​然後使用 await 呼叫 increaseAllowance() 函式,一旦它獲得津貼,它應該轉到下一行並呼叫函式發送應用程序()。所以簡單來說,它應該首先呼叫區塊鏈上的 increaseAllowance(),然後呼叫 sendApplication()。因為它會增加津貼並且發送應用程序功能會在它之後工作,但它所做的是它同時呼叫這兩個函式並且因為還沒有津貼所以 sendApplication 函式失敗並給出津貼錯誤,所以我希望它在區塊鏈上排隊並在呼叫 increaseAllowance() 函式後執行

const sendApplication = async () => {

try {
     if(!ethereum) return alert("Please install MetaMask.");

     const contractDai = await getDAIContract(); //Dai Contract abi
     const contract = await getEtherContract(); //2nd Contract abi
           
     const increaseAllowance = await contractDai.increaseAllowance('2nd_contract_address', 100);
     const sendApplication = await contract.sendApplication(100);

       } catch (error) {
           console.log("error : ", error);
       }
   }

兩者都increaseAllowance修改sendApplication狀態,因此它將向乙太坊進行交易。你需要等待交易被探勘。

const increaseAllowanceTx = await contractDai.increaseAllowance('2nd_contract_address', 100);
await increaseAllowanceTx.wait();

const sendApplicationTx = await contract.sendApplication(100);
await sendApplicationTx.wait();

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