Как использовать выборку в ООП?

Я хочу начать изучать ООП и использовать выборку для получения информации. Но я изо всех сил пытаюсь общаться между классами. Я не могу ПОЛУЧИТЬ информацию в другой класс для дальнейшей обработки.

Мой код

Fetch.js

class Fetch  {
    constructor(data) {
        this.data = data;
    }

    async fetchData(path) {
        const res =  await fetch(path)
        const { status } = res;
        if (status <  200  || status >=  300) {
            return  console.info("Oh-Oh! Seite konnte nicht gefunden werden: " + status)
        }
        this.data = res.text();
    }
}

export  default Fetch;

Day08.js

1  | import Fetch from "./Fetch.js";
2  | 
3  | class Day08 extends Fetch  {
4  |    constructor() {
5  |        super(data);
6  |        this.doSomething();
7  |    }
8  | 
9  |   doSomething() {
10 |    console.info(this.data)
11 |    }
12 | }
13 | 
14 | new Day08();

Затем в моей консоли я получаю это data is not defined в Day08 в строке 6.

Вопрос

Итак, у меня есть вопрос, как я могу использовать данные, полученные в результате выборки? Я также пытался написать свой doSomething() по-другому, например:

doSomething() {
    const fetching =  new  Fetch.fetchData("./Inputs/08-data.txt");
    console.info(fetching)
}

Но тогда я также получаю, что данные не определены. Я не знаю, как получить информацию и использовать ее в другом классе, я пытался поискать ответ в Интернете, но не смог его найти.
Входные данные для выборки каждый раз меняются, чтобы получить разные данные. Вот почему я стараюсь избегать создания класса Fetch со статическим возвратом. Если бы кто-нибудь мог помочь мне с этим, это было бы здорово.

Моделирование fetch как класс имеет довольно большие врожденные проблемы. ООП — это не просто классы, это моделирование через классы. Что вообще делает класс Fetch? Он вызывает fetch и выполняет некоторую обработку. На самом деле он ничем не отличается от fetch.then(/* ... */), но он менее гибкий, поскольку вы изолировали промис, что делает класс довольно сложным в использовании. Лучшим дизайном было бы позволить добавить больше кода, который будет обрабатывать разрешенное обещание. Но это то же самое, что .then. Вместо этого вы можете раскрыть обещание, но тогда зачем нужен класс?

VLAZ 10.12.2020 12:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
706
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, проблема в том, что конструктор Day08 должен иметь параметр данных

constructor(data) {
   super(data);
   this.doSomething();
}
Ответ принят как подходящий

Если вы хотите иметь возможность использовать данные в других классах, которые вы извлекаете из класса Fetch, поскольку вызов fetchData является асинхронным, весь код, который будет использовать данные, должен вызываться после завершения асинхронного вызова асинхронным образом.

class Fetch {
  async fetchData(path) {
    const res = await fetch(path)

    const {
      status
    } = res;

    if (status < 200 || status >= 300) {
      return console.info("Oh-Oh! Seite konnte nicht gefunden werden: " + status)
    }

    this.data = await res.text();
  }
}

class Day08 extends Fetch {
  constructor(path) {
    super()
    this.path = path;
  }

  async init() {
    await this.fetchData(this.path);
  }

  doSomething() {
    console.info('Something', this.data)
  }

  doSomethingElse() {
    console.info('Else ', this.data)
  }
}

const day = new Day08('https://jsonplaceholder.typicode.com/todos/1')

day.init().then(() => {
  day.doSomething();
  day.doSomethingElse();
})

Это отлично сработало. Знаете ли вы способ, при котором мне не нужно использовать последние строки кода? Нравится вызов функции в конструкторе?

Mähnenwolf 10.12.2020 13:19

Возможно, взгляните на этот вопрос и ответьте stackoverflow.com/questions/43431550/…

Nenad Vracar 10.12.2020 13:20

Другие вопросы по теме