Search code examples
javascripttypescriptpromiseauth0asynccallback

Wrapping Auth0's parseHash function in a Promise


auth0.js has a function that's used to parse the URL hash fragment and extract the authentication result therefrom. I'm wrapping this function within one called loadSession as follows:

public loadSession(): void {
  this.auth0.parseHash((err, authResult) => {
    if (authResult) {
      window.location.hash = '';
      localStorage.setItem('token', authResult.accessToken);
      // TODO (1)
    } else if (err) {
      // TODO (2)
    }
  });
}

As seen above, parseHash takes a callback function as an argument and I cannot control that. I would like loadSession to return a Promise that would be resolved at // TODO (1) and rejected at // TODO (2) above. This way I can do obj.loadSession().then(() => { // do something if successful }).catch((err) => { // raise error if not })


Solution

  • Simply wrap it inside a promise:

    public loadSession() {
        return new Promise((resolve, reject) => {
            this.auth0.parseHash((err, authResult) => {
                if(authResult) {
                    window.location.hash = '';
                    localStorage.setItem('token', authResult.accessToken);
                    resolve(authResult);
                } else if (err) {
                    reject(err);
                }
            });
        });
    }