Observer中invalidateLater的位置是否重要?失效时机如何判定?
Shiny observer中invalidateLater的位置影响分析
这两种写法存在明显差异,invalidateLater()的计时是从调用该函数的瞬间开始计算,而非observer表达式执行完毕时。
两种写法的具体差异:
- 第一种写法:
observe({ invalidateLater(100) compute_long_operation() })
调用invalidateLater(100)后立刻启动100毫秒计时,同时执行耗时的compute_long_operation()。如果该操作耗时超过100毫秒,计时会在操作结束前到期,observer会在当前操作完成后立刻重新触发。
- 第二种写法:
observe({ compute_long_operation() invalidateLater(100) })
先执行完耗时的compute_long_operation(),之后才启动100毫秒计时。两次observer触发的间隔等于「耗时操作的执行时间 + 100毫秒」。
简言之,invalidateLater()的计时起点是它被调用的时刻,和后续代码的执行时长无关,位置不同会直接改变observer的触发时机和频率。
内容的提问来源于stack exchange,提问作者Simon Garnier
相关产品推荐
相关产品推荐

