在 Promise 中包装 Auth0 的 parseHash 函数

Sam*_*mmy 6 javascript asynccallback promise typescript auth0

auth0.js有一个函数,用于解析 URL 哈希片段并从中提取认证结果。我将此函数包装在一个名为loadSession如下的函数中:

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)
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

如上所示,parseHash将回调函数作为参数,我无法控制它。我想loadSession返回一个在上面Promise解决// TODO (1)和拒绝的问题// TODO (2)。这样我可以做到obj.loadSession().then(() => { // do something if successful }).catch((err) => { // raise error if not })

Kar*_*rma 3

只需将其封装在一个承诺中:

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);
            }
        });
    });
}
Run Code Online (Sandbox Code Playgroud)