我需要在contract
发出事件后更新数据库。我担心contract
在DB操作完成前发出另一个SomeEvent
,导致useEffect
在第一次更新完成前重新触发。这是真正的问题吗?通常是如何处理的?
useEffect(() => {
contract.on("SomeEvent", (_a, _b) => {
...perform DB operations here!
})
/* Handle unmounts */
return () => {
contract.removeAllListeners("SomeEvent");
}
}, [])
2条答案
按热度按时间z31licg01#
一种方法是使事件侦听器成为承诺链,这样下一个事件只在前一个事件完成后运行(通过等待异步函数)。
tpxzln5u2#
@塞巴斯蒂安删除了一条建议技术术语“竞态条件”的评论,我发现了这个帮助澄清我的问题是什么的article(同时也阐明了@phil所指出的)。我修修补补,发现1)
useEffect
将完成所有事件调用,只是不是按照它们被接收的顺序,2)可以使用类似于here的结构检索最新请求