Para usar APIS tenemos que usar un fetch y de parámetro el link de la api, después tenemos las llamadas Promesas que son .then .
"use strict";
//********************************
//*** Obteniendo datos con fetch
var boton = document.getElementById('boton');
var contenedor = document.getElementById('contenedor');
var posts = null;
boton.addEventListener('click', function () {
fetch('http://jsonplaceholder.typicode.com/posts')
.then(data => data.json())
.then(data => {
posts = data;
mostrarDatos(posts)
})
});
function mostrarDatos(posts) {
posts.map((post, i) => {
let titulo = document.createElement('h1');
let contenido = document.createElement('p');
titulo.innerHTML = (i + 1) + " - " + post.title;
contenido.innerHTML = post.body;
contenedor.appendChild(titulo);
contenedor.appendChild(contenido);
})
}
Trabajar con varios fetch
Tenemos que anidar promesas, es decir ,un .then dentro de otro
"use strict";
//********************************
//*** Trabajando con promesas
var boton = document.getElementById('boton');
var contenedor = document.getElementById('contenedor');
var contBanderas = document.getElementById('banderas');
boton.addEventListener('click', function () {
getPosts()
.then(data => data.json())
.then(posts => {
mostrarDatos(posts);
return getCountries();
})
.then(data => data.json())
.then(countries => {
mostrarBanderas(countries);
});
});
function getPosts() {
return fetch('http://jsonplaceholder.typicode.com/posts');
}
function getCountries() {
return fetch('https://restcountries.eu/rest/v2/all');
}
function mostrarBanderas(countries) {
contBanderas.innerHTML = '';
countries.map((country, i) => {
let bandera = document.createElement('img');
bandera.src = country.flag;
bandera.width = '20';
bandera.height = '20';
contBanderas.appendChild(bandera);
})
}
function mostrarDatos(posts) {
contBanderas.innerHTML = '';
posts.map((post, i) => {
let titulo = document.createElement('h1');
let contenido = document.createElement('p');
titulo.innerHTML = (i + 1) + " - " + post.title;
contenido.innerHTML = post.body;
contenedor.appendChild(titulo);
contenedor.appendChild(contenido);
})
}
Si tenemos errores al fetchear o en cualquier momento, podemos usar un catch lo cuál es chistoso pq se usa sin un try
boton.addEventListener('click', function () {
getPosts()
.then(data => data.json())
.then(posts => {
mostrarDatos(posts);
return getCountries();
})
.then(data => data.json())
.then(countries => {
mostrarBanderas(countries);
})
.catch(error => {
mensajes.classList.toggle('hide');
mensajes.innerHTML = error;
setTimeout(() => mensajes.classList.toggle('hide'), 6000);
})
});