fork download
  1. class TokenStorage {
  2. initialize(token) {
  3. this._token = null
  4. }
  5.  
  6. async getStoredToken() {
  7. return this._token ? this._token : await this.refreshToken();
  8. }
  9.  
  10. async refreshToken() {
  11. this._token = await fetchTokenSomehow();
  12. return this._token;
  13. }
  14. }
  15.  
  16. let tokenStorage = new TokenStorage();
  17.  
  18. async function poll() {
  19. let response = await tokenStorage.getStoredToken().then(fetchResponse);
  20.  
  21. if (isTokenExpired(response)) {
  22. response = await tokenStorage.refreshToken().then(fetchResponse)
  23. }
  24.  
  25. if (response.ok) {
  26. let result = response.json.result;
  27. if (result && result !== 'reinit-required') processData(result);
  28.  
  29. setTimeout(poll, 0);
  30. } else {
  31. setTimeout(poll, 1000);
  32. }
  33. }
  34.  
  35. async function fetchResponse(token) {
  36. try {
  37. let response = await fetch(`http://127.0.0.1:8000/delta?token=${token}`);
  38. let json = await response.json();
  39.  
  40. return { ok: response.ok, json, status: response.status };
  41. } catch(e) {
  42. return { ok: false, error: e };
  43. }
  44. }
  45.  
  46. async function fetchTokenSomehow() {
  47. // ...
  48. }
  49.  
  50. function processData(result) {
  51. // ...
  52. }
  53.  
  54. function isTokenExpired(response) {
  55. // ...
  56. }
Success #stdin #stdout 0.03s 16640KB
stdin
Standard input is empty
stdout
Standard output is empty