@slun

Javascript. Какой использовать паттерн инициализации класса с асинхронным запросом внутри?

Цель - получить своеобразную абстрактную модель, которая сама подгрузит необходимые данные ajax-запросом. Вызывать ajax-запрос в конструкторе - не самая хорошая идея. То есть, мы конечно можем проставить все необходимые поля из коллбэка запроса, но если у класса будут наследники, которые используют результат инициализации родителя, коллбэк запроса отработает позже инициализации наследника.
Иначе говоря, мне бы хотелось заблокировать инициализацию до момента пока запрос не будет завершен. Пока на ум приходит 3 варианта:
1. Использовать синхронный запрос (априори плохая идея)
2. В конструкторе родителя отправить запрос, из коллбэка вызвать некий метод, который обработает результат и вернет Promise, затем в потомке, основываясь на результатах промиза, продолжать инициализацию.
3. Использовать фабричный метод, который сам отправит запрос, затем уже коллбэк запроса вернет инстанс класса.
Подскажите, может я чего-то упускаю и можно это сделать проще и красивше?
  • Вопрос задан
  • 251 просмотр
Пригласить эксперта
Ответы на вопрос 2
Negwereth
@Negwereth
lvivcss.com.ua
Фабрика.

И да, а надо ли вам именно классы-классы? Может, вам обычной композиции объектов хватит? Тогда фабрика у вас вообще на 100% отработает.
Ответ написан
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Объекту с данными незачем знать, как эти данные хранятся. Поэтому да, фабрика. На худой конец фабричная функция может быть статическим методом этого класса, но не более.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы