Я построил массив newPlanets, используя вызовы API вместе с Promise.all
export function api_calling(){
var newPlanets = [];
const URLs = fetching() // function that returns an array of fetches
Promise.all(URLs).then(data => {
// push all "results" field into newPlanets
for (var i = 0; i < 7; i++) {
for (var n = 0; n < 10; n++) {
newPlanets.push(data[i].results[n]);
}
}
})
return newPlanets;
}
Однако при возврате его в другую функцию, которая его вызывает:
class App extends Component {
constructor(props){
let data = api_calling()
console.info(data)
super(props);
}
}
консоль показывает пустой массив. Как я могу вернуть построенный массив в свой компонент?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Промисы будут разрешаться асинхронно, поэтому вы не можете записать let data = api_calling() в конструкторе.
Вместо этого вы можете вернуть результат Promise.all из api_calling и установить состояние компонента, когда оно будет разрешено в componentDidMount.
Пример
function api_calling() {
const URLs = fetching();
return Promise.all(URLs).then(data => {
var newPlanets = [];
for (var i = 0; i < 7; i++) {
for (var n = 0; n < 10; n++) {
newPlanets.push(data[i].results[n]);
}
}
return newPlanets;
});
}
class App extends Component {
state = { data: [] };
componentDidMount() {
api_calling().then(data => {
this.setState({ data });
});
}
render() {
// ...
}
}
@IMTRYING Вы тоже заметили изменения в api_calling? Вам нужно вернуть Promise.all, а также вернуть newPlanets внутри обратного вызова then.
извините, я пропустил возвратную часть newPlanets, спасибо!
Я пробовал ваше решение, и при входе в консоль прямо перед this.setState консоль все еще показывает undefined