Fetch y await

facebook-svg gplus-svg twitter-svg

El método fetch()

El método fetch de la nueva API fetch busca y trae recursos como datos, imágenes etc. . . de otros archivos ( fetch significa ir a buscar algo, traer algo ).
Un ejemplo básico: utilizar la función fetch para traer una imagen .jpg y mostrarla en pantalla.

// la función fetch toma un solo argumento: la ruta hacia la imagen
fetch('imagen.jpg')
//una vez llamada la función fetch tenemos que esperar una respuesta, y la respuesta es parte de una promesa. 
// si hay una respuesta devuélvemela en forma de (texto o en forma de json, o en forma de) blob... 
.then(respuesta =>{
return respuesta.blob();
})
// de nuevo necesitamos esperar el blob y cuando lo tenemos 
.then(respuesta2=>{
// utilizamos el método URL.createObjectURL() para crear una cadena de texto que puede ser utilizada como valor del atributo src de una imagen
fetchTest.src = URL.createObjectURL(respuesta2)
})
// pero si hay algún error atrápalo (catch)
.catch(error =>{console.error(error)})

Vea este ejemplo en codepen:

See the Pen fetch by Gabi (@enxaneta) on CodePen.

La palabra clave await

Podemos hacer lo mismo utilizando la palabra clave async. En este caso el codigo es más conciso y presuntamente más facil de leer

La palabra clave await puede ser utilizada solamente en funciones asíncronas, Empleamos la palabra clave async para especificar que una función se ejecuta de manera asíncrona.

Primero necesitamos crear una función asíncrona

async function funcionAsincrona(url){
// espera (await) una respuesta de fetch()
const  respuesta = await fetch(url);
// espera (await) el blob
const respuesta2= await response.blob();
// y cuando lo tenga crea un nuevo objeto url y utilízalo como valor del atributo src de la imagen
fetchTest.src = URL.createObjectURL(blob)
}

A continuación podemos llamar la funcionAsincrona()

//Pero en el caso en el cual hay un error atrápalo con catch
funcionAsincrona().catch(error =>{console.error(error)})

Vea este ejemplo en codepen:

See the Pen async await by Gabi (@enxaneta) on CodePen.