Qué son las promesas? en si son funciones que regresan algo
<a href="/ejercicios/">Go back</a>
<ul>
<li><button id="sequence">Get Top Movies in Sequence</button></li>
<li><button id="parallel">Get Top Movies in Parallel</button></li>
<li><button id="fastest">Get Fastest Top Movie</button></li>
</ul>
<ul id="movies"></ul>
const apiKey = 'b89fc45c2067cbd33560270639722eae';
/* --Peticiones-- */
async function getMovie(id) {
const url = `https://api.themoviedb.org/3/movie/${id}?api_key=${apiKey}`
const response = await fetch(url)
const data = await response.json()
return data
}
async function getPopularMovies() {
const url = `https://api.themoviedb.org/3/discover/movie?sort_by=popularity.desc&api_key=${apiKey}`
const response = await fetch(url)
const data = await response.json()
return data
}
async function getTopMoviesIds(n = 3) {
const popularMovies = await getPopularMovies();
const ids = await popularMovies.results.slice(0,n).map(movie => movie.id);
return ids;
}
****/* --R**enderizado de Data**-- */
function renderMovies(movies) { //obtiene un array de peliculas
const movieList = document.getElementById('movies') //obtiene el tag
movieList.innerHTML = '' // declara el contenido vacio
movies.forEach(movie => { // toma el array de peliculas y hace el foreach
const listItem = document.createElement('li') //crea dentro un tag li
listItem.innerHTML = `
<img src="<http://image.tmdb.org/t/p/w342${movie.poster_path}>" />
<h5>${movie.title}</h5>
<p>Released on <em>${movie.release_date}</em></p>
`
// append = adjuntar: adjunta el elemento li al elemento padre
movieList.appendChild(listItem)
})
}
/* --Funciones **de Orden de Renderizado**-- */
//de esta manera obtenemos por orden las 3 peticiones
async function getTopMoviesInSequence() {
const ids = await getTopMoviesIds() //peticion de ids de peliculas
const movies = [] // creamos un array vacio
for (const id of ids) { //ids de peliculas uno por uno
const movie = await getMovie(id) //peticion mediante el id de la peli
movies.push(movie) //grega el objeto en el array de peliculas
}
return movies
}
//de esta otra manera obtenemos en paralelo todas las peliculas
//todas son devueltas al mismo tiempo
async function getTopMoviesInParallel() {
const ids = await getTopMoviesIds() //obtenemos ids
//obtenemos la pelicula de cada espacio en el array
// cada id pasa a ser una promesa de getMovie
const moviePromises = ids.map(id => getMovie(id))
//en movies retornamos todas las promesas y all espera a que todas las promesas sean resueltas
const movies = await Promise.all(moviePromises)
return movies
}
// ver las promesas conforme van siendo recibidas
async function getFastestTopMovie() {
const ids = await getTopMoviesIds() //obtenemos ids
//superpone cada una de las peticiones sobre el id
const moviePromises = ids.map(id => getMovie(id))
// se pinta la primera que regrese
const movies = await Promise.race(moviePromises)
return movies //aqui regresara como un array
}
/* --Botones-- */
document.getElementById('sequence').onclick = async function() {
const movies = await getTopMoviesInSequence();
//console.log(movies)
renderMovies(movies);
};
document.getElementById('parallel').onclick = async function() {
const movies = await getTopMoviesInParallel();
//console.log(movies)
renderMovies(movies);
};
document.getElementById('fastest').onclick = async function() {
const movie = await getFastestTopMovie();
console.log([movies])
renderMovies([movie]);
};