How to make a private delay function in javascript es6

问题描述 投票:0回答:0

我想制作一个延迟 100 毫秒的私有类函数,但我无法完全正确地理解语法。

下面是一个简短的 ES6 类,用于检查用户是否具有某些权限。我将结果缓存在

#permissions
中,这是一个数组。我只想公开一种方法:
has
,它接受一个字符串参数并根据该权限列表检查它。

class Permission {
  #permissions = [];

  #started = false;

  async init() {
    this.#started = true;
    const res = await axios.get('/user/permissions');
    this.#permissions = res.data.permissions;
    this.#started = false;
  }

  static #delay(ms) {
    return new Promise((resolve) => setTimeout(resolve, ms));
  }

  async has(perm) {
    while (!this.#permissions.length) {
      if (!this.#started) {
        this.init();
      }
      await this.#delay(100);
    }
    return this.#permissions.includes(perm);
  }
}

我试过的:

  1. 当我删除
    static
    关键字时,linter 抱怨它应该是一个静态函数,因为
    this
    不在函数中。
  2. 当我把
    static
    放回去时,linter 是无声的,但我得到一个运行时错误:
    TypeError: Receiver must be class Permission
javascript ecmascript-6 es6-promise
© www.soinside.com 2019 - 2024. All rights reserved.