fetch

Las peticiones fetch permiten hacer peticiones a un servidor cuyos resultados serán gestionados mediante promesas.

Ejemplos de uso de fetch

Petición GET sin parámetros a una API externa

fetch('https://swapi.co/api/people/1/')
.then(res => res.json())
.then(callback);

function callback(data){
	console.log(data)
}

Petición GET sin parámetros a un fichero local

fetch('biblioteca.json')
.then(res => res.json())
.then(callback);

function callback(data){
	console.log(data.titulo)
}

En un documento JSON correcto, los nombres de las propiedades deben ir entre comillas dobles.

biblioteca.json
[
	{
		"titulo": "La Aventura",
		"autor": "Paco"
	},
	{
		"titulo":"Las cosas",
		"autor": "Pac"
	}
]

Petición POST con parámetros

fetch('http://localhost:13289/escenas/recuperar_escenas_obra', {
    method:'POST',
	headers: {
		"Content-Type": "application/json",
         },
    body:JSON.stringify({id:1})})
    .then(res => res.json())
    .then(escenas => {
      console.log(escenas);
    });

Ejercicio Fetch

Haz la siguiente petición:

https://swapi.co/api/people/

y recorre el resultado pata mostrar una lista con los datos recuperados

Codigo para simplificar las peticiones

const API_URL = 'http://localhost:13289';

const fetchData = (url, options = {}) => {
  return fetch(API_URL + url, {
    headers: {
      'Content-Type': 'application/json'
    },
    ...options,
  }).then(res => res.json())
};

export const getJson = (url, params) => {
  const urlParams = params && Object.entries(params)
    .reduce((acc, [name, value]) => `${acc}${name}=${value}&` , '?')
    .slice(0, -1);
 return fetchData(url + urlParams);
};

export const postJson = (url, params) => {
  return fetchData(url, {
    method: 'POST',
    body:JSON.stringify(params)
  });
};
Para usarlo:
import {getJson, postJson} from "../http";
  const escenas2 = getJson('/escenas/recuperar_escenas_obra', {id: 1, amor: 'mucho'})
};

Promise

Las promesas nos permiten gestionar código asincrónico. Las promesas de Javascript nativo, son similares a las promesas de jquery.

$.get('url.php', callback);

Antes de tener disponibles las promesas nativas para gestionar estas peticiones asíncronas, teníamos que usar este código:

function get(url, callback) {
	var req = new XMLHttpRequest();
	req.open('GET', url);

	req.onload = function() {
		if (req.status === 200) {
			callback(req.response);
		}
	};

	req.send();
}

get('url.php', callback)

El equivalente con promesas nativas de Javascript, sería esto:

fetch('url.php').then(callback);

Crear una promesa (ejecutar una función de forma asincrónica)

En Javascript todo el código es sincrónico. Las funciones asincrónicas se ejecutas después de las asincrónicas (no entre medias).

Definimos una función sincrónica

const add = (num1, num2) => num1 + num2;
const makeSumPromise = () => new Promise((resolve) => {
	resolve(add(3,2))
});

num contendrá el valor que devuelve el resolve

makeSumPromise.then(num => )

La función fetch devuelve una promesa

let promesa = fetch('url.php');
promesa.then(...)
Volver a: Javascript

Aviso Legal | Política de privacidad