ошибка — функция не является функцией в дочернем классе

#javascript #arrays #class #asynchronous #promise

#javascript #массивы #класс #асинхронный #обещание

Вопрос:

У меня есть родительский класс Weather, который показывает погоду в течение 4 дней. У меня есть дочерний класс, который получает массив городов. И он должен показывать погоду на 4 дня для случайного города в этом массиве. Но у меня ошибка — this.makeRandom(…).then не является функцией. Что не так?

 class GetRandomCity extends Weather {
    constructor(city) {
        super();
        this.city = city;
    }

    makeRandom() {
       //code
    };

    init() {
        this.makeRandom().then(city => {
            this.getCoordinates(city)
        }).then(coords => {
            return this.getWeatherForecast(coords);
        }).then((forecast) => {
            const { currently, daily } = forecast;
            this.renderForecastInfo(currently, daily);
        });
    }
}

const w1 = new GetRandomCity(['Paris', 'Minsk', 'Madrid', 'Chikago']);
  

Комментарии:

1. makeRandom не является асинхронной функцией, вам не нужен then, then используется для обещаний.

2. @BerkKurkcuoglu как я могу передать значение city в функцию getCoordinates?

3. this.getCoordinates(this.makeRandom())

Ответ №1:

Причина в том, что makeRandom не возвращает обещание. Вам нужно поместить оператор return перед getCoordinates , если вы решите сделать это async функцией. В противном случае вы могли бы изменить свой код в своей init функции на этот, и он должен работать:

 const city = this.makeRandom();

this.getCoordinates(city).then(coords => {

  return this.getWeatherForecast(coords);

}).then(forecast => {

  const { currently, daily } = forecast;
  this.renderForecastInfo(currently, daily);

});