Truffle
如何停止監聽合約的所有事件
我在松露測試中使用 JavaScript API 從契約中獲取事件: https ://github.com/ethereum/wiki/wiki/JavaScript-API#contract-allevents
const allEvents = instance.allEvents({ fromBlock: 0, toBlock: 'latest' }); allEvents.watch((err, res) => { console.log(res); });
它永遠不會停止聽,所以我嘗試將其添加到末尾:
allEvents.stopWatching()
收聽停止,但沒有記錄任何內容,所以我嘗試添加延遲:
setTimeout(allEvents.stopWatching, 1000);
但傾聽並沒有停止。
在檢索到到目前為止發出的所有事件後,如何停止收聽?
- 使用索引參數,例如地址或整數也非常有用
此處使用 ERC20.sol檢查的
Erc20.transfer
範例應該發出event(address _to, uint256 _amount)
可以被索引的內容,從而更容易在前端event Transfer(address indexed _to, uint256 _amount);
合約事件中進行過濾可以這樣寫,並且在傳輸過程中您只能從索引地址和索引金額中獲取事件。
Erc20.events.Transfer({ filter: { _to: recipient, _amount: amount} }) .on("data", function(event) { .... }).on("error", console.error); }
我希望有人覺得這有幫助,我也願意更正。
它說如果你傳遞一個回調函式,你不需要呼叫 stopWatching()。問題出在其他地方,所以放棄使用 stopWatching 的想法。你可以試試這個實現嗎:
const allEvents = instance.allEvents({ fromBlock: 0, toBlock: 'latest' }); allEvents.watch((err, res) => { if (!error) console.log(res); });
給我一個更新