Это метод класса asyn c? (нет экземпляра) - PullRequest
0 голосов
/ 17 июня 2020

У меня очень простой вопрос, я искал, но не могу найти решения.

Возьмите этот код:

class Foo {
  bar = () => {
      return 'string'
  }

  baz = async() => {
      return 'promise'
  }
}

Я хочу знать, есть ли Speci c метод класса является asyn c или нет.

isAsync(Foo, 'bar') // false
isAsync(Foo, 'baz') // true

дело в том ... Я НЕ хочу создавать его экземпляр. Все найденные мной решения используют "getOwnPropertyNames" в экземпляре класса для получения функций.

Возможно ли это?

Спасибо! ?

Ответы [ 2 ]

1 голос
/ 17 июня 2020

дело в том ... Я НЕ хочу создавать его экземпляр. Все найденные мной решения используют "getOwnPropertyNames" в экземпляре класса для получения функций.

Возможно ли это?

В вашем конкретном примере c, bar и baz - это поля класса экземпляра . Это то же самое, что писать

class Foo {
  constructor() {
    this.bar = () => {
       return 'string'
    };

    this.baz = async() => {
        return 'promise'
    };
  }
}

Свойства (и функции) не существуют, пока вы не создадите экземпляр класса.

Итак, ответ для этого конкретного случая c is no .

Если вы объявляете функции как «обычные» методы класса, вы можете просто посмотреть на свойство prototype функции конструктора.

1 голос
/ 17 июня 2020
// the most simple way is
const isAsync = (someClass, name) => {
  if (name in someClass.prototype) 
    return someClass.prototype[name][Symbol.toStringTag] === 'AsyncFunction'

  const newInstance = new someClass()
  if (name in newInstance)
    return newInstance[name][Symbol.toStringTag] === 'AsyncFunction'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...