#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);
});