Javascript 如何正确等待存储事件?

Javascript 如何正确等待存储事件?,javascript,browser,Javascript,Browser,我需要一种安全的方式来存储身份验证令牌,但我想让用户在多个选项卡上使用应用程序,而无需每次重新验证。所以我需要sessionStorage的不耐烦,以及localStorage的多选项卡可访问性。这就是我实施的原因 其概念是,在启动时,应用程序会将一些数据写入localStorage,这会在每个选项卡(使用相同的域)上触发一个。在事件的回调中,其他实例可以发回另一个StorageEvent负载中的数据。因此,新实例可以收集数据,比如身份验证令牌 问题是,addEventListener回调是异步

我需要一种安全的方式来存储身份验证令牌,但我想让用户在多个选项卡上使用应用程序,而无需每次重新验证。所以我需要
sessionStorage
的不耐烦,以及
localStorage
的多选项卡可访问性。这就是我实施的原因

其概念是,在启动时,应用程序会将一些数据写入
localStorage
,这会在每个选项卡(使用相同的域)上触发一个。在事件的回调中,其他实例可以发回另一个StorageEvent负载中的数据。因此,新实例可以收集数据,比如身份验证令牌

问题是,
addEventListener
回调是异步的,如果没有其他选项卡,则不会调用任何内容,因此决定我的应用程序何时呈现登录表单而不是内容并不是件小事。(我的应用程序的初始渲染是同步的,但在大多数情况下,事件在验证逻辑之前到达。)

我尝试了
setImmediate
,这增加了正确行为的数量,但在某些情况下,回调仍然启动得太晚


我如何才能正确地等待这样一个异步事件?

使用setInterval检查StorageEvent是否已触发,而不是使用setImmediate。当StorageEvent激发时,让它设置一个全局变量,该变量可以从当前选项卡中的任何位置访问。然后,当设置此变量时,setInterval调用中定义的函数应停止检查并调用从该点开始需要运行的任何代码。