Javascript
您如何解決和結束 ethers.js 中的待處理事務檢查?
我有以下程式碼掃描待處理的交易池,直到找到我的錢包:
var scanTxPool = async () => { var myWallet = '0x0000000000000000000000000000000000000000'; var foundWallet = false; provider.on("pending", async (txHash) => { if (!foundWallet) { provider.getTransaction(txHash).then(async (tx) => { if (tx && tx.to) { if (tx.from === myWallet) { console.log('Found my wallet!'); foundWallet = true; } } }); } }); // do other stuff }
程式碼執行良好,但我有兩個問題:
- 當掛起的事務在後台執行時,執行繼續“做其他事情”。如何確保在執行其他操作之前等待待處理的事務檢查?
- 一旦從我設置的交易雜湊中找到我的錢包
foundWallet
,true
檢查!foundWallet
就會阻止它呼叫getTransaction(txHash)
. 但是,掛起的 txHash 檢查仍然無限期地執行。一旦滿足我的條件,我如何才能乾淨地結束待處理的交易檢查?編輯:請在 ethers-io repo 中查看 zemse 的解決方案,該解決方案仍然對我不起作用:https ://github.com/ethers-io/ethers.js/discussions/2176#discussioncomment-1487598
你這個概念有點不對。
provider.on("pending", ...)
被稱為偵聽器,它應該被稱為全域。所以它會監聽pending
交易,當找到交易時,它會通過執行作為第二個參數傳遞的函式來通知你。const completion = (tx) => { /* do some stuff */ } const checkTxHash = async (txHash) => { const tx = await provider.getTransaction(txHash) if (!tx || !tx.to) return if (tx.from === myWallet) { console.log('Found my wallet!') provider.removeAllListeners() completion(tx) } } provider.on("pending", checkTxHash);