У меня есть вызов ajax, который отвечает списком фильмов, а затем у меня есть другая функция с другим вызовом ajax, которая возвращает имена жанров, так как первый вызов имеет только идентификатор жанра, затем я связываюgenreId с его именем, и я назначаю его JSON при первом вызове ajax, что-то вроде присвоения переменной.Проблема, которая у меня есть, состоит в том, что, поскольку ajax является асинхронным, он всегда заканчивается неопределенным.Я не хочу делать его синхронным, так как это приведет к плохому взаимодействию с пользователем.
Первый вызов ajax
$.ajax({
url: urlString,
success: (searchResults) => {
const results = searchResults.results
var movieRows = [];
results.forEach(movie => {
movie.genres = this.getMovieGenres(movie.media_type, movie.genre_ids);
const movieRow = <MovieRow key={movie.id} movie={movie}/>;
movieRows.push(movieRow)
});
this.setState({rows: movieRows})
},
error: (xhr, status, err) => {
console.log("Failed to fetch data...")
}
})
Функция, которую явызов со вторым вызовом ajax
getMovieGenres (mediaType ,movieGenreIds) {
urlString = `https://api.themoviedb.org/3/genre/movie/list?api_key=${config.movieDBbApiKey}&language=en-US`ApiKey}&language=en-US`
var genres = []
$.ajax({
url: urlString,
async: true,
crossDomain: true,
method: "GET",
success: searchResults => {
for (let i = 0; i < movieGenreIds.length; i++) {
for (let j = 0; j < searchResults.genres.length; i++){
console.log(searchResults.genres[j].id)
if (movieGenreIds[i] === searchResults.genres[j].id) {
genres.push(searchResults.genres[j].name)
}
}
}
},
error: (xhr, status, err) => {
console.log("Failed to fetch data...")
}
})
return genres
}