Arhn - архитектура программирования

Использование promises/async для установки свойств класса

У меня есть большой скрипт, который выполняет множество вызовов обещаний и асинхронных вызовов, поэтому я создал новый класс, в который начал перемещать функции обещаний. Но теперь я изо всех сил пытаюсь инициализировать свойства класса.

class MyClass {
    constructor(id) {
        this._id = id
        this._thing = []
    }

    getThing {
        return this['_thing']
    }

    async init() {
        this._thing = this.requestThing(this['_id']) 
    }

    requestThing(id) {
        return new Promise((resolve) => {
            // Make request using id
            resolve(response);
        })
    }
}

Так что я думал о чем-то вроде этого

const init = async () => {
    let myClass = await new MyClass(123)
    await myClass.intialise()
    let test = myClass.getThing()
}

init()

Но я, кажется, получаю ошибки. На данный момент мой код довольно сложно отлаживать (или переписывать, чтобы сделать простой тест — отсюда и рефакторинг), так как я использую множество промисов и асинхронных функций.

Это правильный способ инициализации класса, который должен выполнять асинхронные вызовы для установки своих свойств?


  • @slebetman Если вы собираетесь пометить этот вопрос как дубликат, а затем дать ссылку на свой ответ, не могли бы вы расширить свой ответ? Пытаясь использовать фабричный шаблон, я не могу сделать "doSomeAsyncStuff" на фабрике, так как я продолжаю получать метод, который не определен 14.04.2018
  • Определите requestThing либо как обычную функцию вне класса, либо как статический член в классе (в этом случае вы бы назвали ее MyClass.requestThing() вместо использования this. 14.04.2018
  • Я добавил длинное объяснение в сам ответ, но на самом деле это не имеет ничего общего с асинхронностью. Это действительно заслуживает отдельного вопроса 14.04.2018
  • @slebetman большое спасибо за расширенное объяснение, я не знал, что наткнулся на проблему XY о this и статических методах. Ваш первоначальный ответ указал мне правильное направление в отношении использования статических методов, но ваше расширенное объяснение подтвердило это. 15.04.2018
  • Пожалуйста. Динамические и функциональные языки, как правило, имеют простой синтаксис и меньше правил по сравнению со статическими языками, но в них также больше вещей, возникающих в результате взаимодействия между различными правилами. Если подумать, это может показаться логичным, но подобное поведение не документируется до тех пор, пока кто-нибудь не наткнется на него и не задаст вопросы в Интернете. 15.04.2018

Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..