继续优化业务代码

2023-08-03

今天的工作内容有点头疼,主要还是继续维护了下去房间模式的字幕,优化了长链接模块的代码,删除了原先部分逻辑。其中影响比较大的是初始化的逻辑,把我彻底搞傻了。由于需要检查 Token 的有效性,改成了异步函数,导致外部实例化的过程中,this.client 的值不会立即被初始化,我没注意到这个问题,导致出现了异常,改了一段时间。

class Client {
  constructor() {
    this.init();
  }

  client = undefined;

  checkToken = async () => {
    // 这里可能需要重新获取(过期),也有可能直接返回(有效)
    return "123";
  }

  init = async () => {
    const token = await this.checkToken();
    // 这里并不会立即执行完
    this.client = new ThirdPartyClient(token);
  }

  subscribe = () => {
    // 此时 this.client 是 undefined
    if (!this.client) return;
  }
}

const client = new Client();
// 执行失败,因为未初始化
client.subscribe("Some Topic");

我能想到的解决办法有两种,一个是不要在外部执行 subscribe 方法,改为一个参数,对应逻辑在类的内部执行。要么就是把实例化返回的对象改为 Promise,Promise 里面再返回 this 指向实例本身(但不晓得是否可能存在什么问题,外部实例化后的其他地方调用其内部方法可能就不太灵活了)

对于这样的业务需求,不知道各位有何看法,怎么写才会更加优雅呢。

多云 一般
概览页 时间轴
奇趣音乐盒 技术源于 Kico Player
Emmm,这里是歌词君