TL;DR:我需要一种机制来在服务工作者中为我的应用程序保存授权令牌,这将被网络请求使用。此令牌将定期更新(15分钟)。如果当前正在获取令牌,则所有新网络请求都应该等待令牌被获取,并使用令牌的新值。
我正在构建一个通过令牌处理身份验证的Web应用程序。由于这个应用程序只应该被用作本机应用程序(使用TWA),我想利用服务工作者来处理网络请求。
要求:
- Service Worker启动并首次获取令牌,并将其存储在内存中的变量中。
- 网络请求使用此令牌进行授权。
- 如果在获取令牌时**发出了一些请求,则它们应该等待令牌被获取,然后在令牌更新后继续。
- 类似地,当在某个短间隔之后再次获取令牌时,也应该发生相同的情况。令牌生命周期本质上是“重置”。
最接近的方法是使用Promises,但由于promises不能更新,因此我尝试使用proxy来实现此效果。
以下是我的尝试:在JavaScript中使用代理的可更新promise
它可能最好通过一些修改形式的“Observables”来实现,但我还没有完全理解它。
1条答案
按热度按时间osh3o9ms1#
不需要改变promise对象本身--这是不可能的,一旦它被锁定到一个值,它就会保持这个值。你可以用另一个Promise来代替它。网络请求将使用当前存储在变量中的promise--该promise要么已经实现,要么是令牌正在更新时的未决promise,因此它们只需等待。
(You还需要考虑错误处理,如果
getToken()
失败,它将存储一个拒绝的承诺,并阻止request
在接下来的15分钟内工作。我会把tokenPromise = null
改为getToken()
,并在第一个需要它的请求上重新尝试getToken()
,同时重新安排时间间隔。