{"id":8501,"date":"2019-05-15T19:40:19","date_gmt":"2019-05-15T17:40:19","guid":{"rendered":"https:\/\/www.espai.es\/blog\/?p=8501"},"modified":"2021-09-13T20:43:08","modified_gmt":"2021-09-13T18:43:08","slug":"async-await-otra-forma-de-usar-promesas-en-javascript","status":"publish","type":"post","link":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/","title":{"rendered":"Async\/Await, otra forma de usar promesas en JavaScript"},"content":{"rendered":"<p>En un anterior art\u00edculo vimos como funcionaban las <a href=\"https:\/\/www.espai.es\/blog\/2019\/02\/promesas-en-javascript\/\" target=\"_blank\" rel=\"noopener\">promesas en JavaScript<\/a>. Sin embargo, existe otra forma de trabajar con promesas que nos permitir\u00e1 escribir un c\u00f3digo m\u00e1s simple y sencillo. Para ello hemos de utilizar las palabras clave async\/await.<\/p>\n<p><strong>Hay que tener en cuenta que esta caracter\u00edstica es nueva de EcmaScript 2017<\/strong>.<\/p>\n<h2>\u00bfComo funciona async en JavaScript?<\/h2>\n<p>Si colocamos la palabra clave <strong>async<\/strong> delante de una funci\u00f3n, estamos indicando que esta funci\u00f3n devolver\u00e1 una promesa. Y <strong>devolver\u00e1 una promesa incluso en el caso de que no devolvamos una promesa de forma expl\u00edcita<\/strong>. Veamos un sencillo ejemplo;<\/p>\n<pre>\r\nasync function foo() {\r\n  return 1;\r\n}\r\n<\/pre>\n<p>Esta sencilla funci\u00f3n no va a devolver simplemente el n\u00famero uno. Va a devolver una promesa ya resuelta que incluya dicho valor. De forma similar a los ejemplos que hemos visto hasta ahora donde al resolverse positivamente la promesa se devolv\u00eda un objeto de tipo Image, en este ejemplo simplemente se devuelve un objeto de tipo Number con el n\u00famero uno.<\/p>\n<pre>\r\nvar promesa = foo();\r\npromesa.then(function(resultado){\r\n  document.write(resultado);\r\n  document.close();\r\n});\r\n<\/pre>\n<p>Tal y como puede observarse; la funci\u00f3n foo() est\u00e1 devolviendo un objeto de tipo Promise a pesar de que no hemos creado ning\u00fan objeto expl\u00edcitamente. Y <strong>la callback resolve<\/strong> recibe como par\u00e1metro un objeto con el valor devuelto por la funci\u00f3n foo().<\/p>\n<p>Por supuesto, nada nos impide devolver de forma expl\u00edcita un objeto de tipo Promise.<\/p>\n<pre>\r\nasync function foo() {\r\n  return Promise.resolve(1);\r\n}\r\n<\/pre>\n<p>En este caso estamos usando el m\u00e9todo est\u00e1tico <strong>resolve()<\/strong> de la clase Promise. Con este m\u00e9todo podemos devolver un nuevo objeto de tipo Promise ya resuelto con el valor indicado por par\u00e1metro. Tambi\u00e9n existe el m\u00e9todo est\u00e1tico <strong>reject()<\/strong> que devuelve una promesa no resuelta satisfactoriamente.<\/p>\n<p>Por lo tanto, <strong>async<\/strong> nos sirve para asegurarnos de que una funci\u00f3n siempre devolver\u00e1 una promesa, independientemente del valor que devuelva. Pero <strong>el verdadero motivo por el cual vamos a usar async es que solo dentro de las funciones que llevan la palabra clave async podemos usar la palabra clave await<\/strong>.<\/p>\n<h2>\u00bfComo funciona await en JavaScript?<\/h2>\n<p>La palabra clave <strong>await<\/strong>, como su nombre indica, provoca que el navegador pause la ejecuci\u00f3n del c\u00f3digo JavaScript hasta que se resuelva la promesa implicada en dicho c\u00f3digo. Esta pausa, no provoca ni un bloqueo en el navegador, ni el consumo significativo de ciclos de la CPU.<\/p>\n<p>Es importante remarcar que <strong>await solo se puede usar dentro de una funci\u00f3n async y que solo puede pausar la ejecuci\u00f3n de JavaScript hasta que se cumpla una promesa<\/strong> (y no en cualquier otra situaci\u00f3n).<\/p>\n<p>Para los siguientes ejemplos vamos a usar una funci\u00f3n del anterior art\u00edculo que nos sirve para cargar im\u00e1genes usando promesas.<\/p>\n<pre>\r\nfunction loadImg(src) {\r\n    return new Promise(function(resolve, reject) {\r\n        var img = new Image();\r\n        img.src = src;\r\n        img.onload = () =&gt; { resolve(img); }\r\n        img.onerror = () =&gt; { \r\n            reject(new Error(&quot;Error al cargar la imagen: &quot; + img.src));\r\n        }\r\n    });\r\n}\r\n<\/pre>\n<p>A modo de ejemplo, el c\u00f3digo que hab\u00edamos re-escrito en el anterior art\u00edculo con <a href=\"https:\/\/www.espai.es\/blog\/2018\/01\/funciones-flecha-en-javascript\/\" target=\"_blank\" rel=\"noopener\">funciones flecha<\/a> lo podemos volver a escribir para usar async\/await. De forma que este c\u00f3digo;<\/p>\n<pre>\r\nvar promesa = loadImg(&quot;sample1.jpg&quot;);\r\npromesa.then(\r\n    img =&gt; { document.write(&quot;Tama\u00f1o: &quot; + img.width + &quot;x&quot; + img.height); }\r\n).catch(\r\n    error =&gt; { document.write(error.message); }\r\n).finally(\r\n    () =&gt; { document.close(); }\r\n);\r\n<\/pre>\n<p>Se podr\u00eda re-escribir del siguiente modo con async\/await:<\/p>\n<pre>\r\nasync function ejecutar() { \/\/ funci\u00f3n as\u00edncrona!\r\n    try {\r\n        \/\/ en la siguiente l\u00ednea, el c\u00f3digo JavaScript se pausa hasta que la promesa se cumple\r\n        var img = await loadImg(&quot;sample1.jpg&quot;);\r\n        \/\/ aqui ya tenemos la promesa cumplida y por lo tanto\r\n        \/\/ podemos acceder al objeto Image sin problemas\r\n        document.write(&quot;Tama\u00f1o: &quot; + img.width + &quot;x&quot; + img.height);\r\n    } catch(err) {\r\n        \/\/ si ha habido alg\u00fan error el c\u00f3digo saltar\u00e1 aqu\u00ed\r\n        document.write(err.message);        \r\n    }   \r\n    document.close(); \r\n}\r\nejecutar();\r\n<\/pre>\n<p>Algunos comentarios al respecto:<\/p>\n<ul>\n<li>Hemos tenido que colocar el c\u00f3digo dentro de una funci\u00f3n <strong>async<\/strong> para que el <strong>await<\/strong> funcione correctamente.<\/li>\n<li>La palabra clave <strong>await<\/strong> solo la podemos usar para pausar el c\u00f3digo hasta que se cumpla la promesa.<\/li>\n<li>Una vez resuelta la promesa, la funci\u00f3n <strong>loadImg()<\/strong> nos devuelve directamente el objeto Image en lugar del objeto Promise.<\/li>\n<li>El c\u00f3digo despu\u00e9s de <strong>loadImg()<\/strong> asume que la promesa se ha resuelto correctamente. En caso de error se produce una excepci\u00f3n que ser\u00e1 capturada por el <strong>catch()<\/strong>.<\/li>\n<\/ul>\n<p>La principal ventaja de esta forma de trabajar con promesas, es que el c\u00f3digo es m\u00e1s similar al c\u00f3digo s\u00edncrono al que estamos acostumbrados. Tal vez en este ejemplo no parezca gran cosa, pero hagamos lo mismo con el ejemplo, del anterior art\u00edculo, en el que se cargaban dos im\u00e1genes de forma secuencial.<\/p>\n<p>Este es el c\u00f3digo original del anterior art\u00edculo:<\/p>\n<pre>\r\n\/\/ intentamos cargar la primera imagen\r\nvar promesa = loadImg(&quot;sample1.jpg&quot;);\r\npromesa.then(\r\n    img =&gt; { \r\n        \/\/ mostramos informaci\u00f3n de la primera imagen\r\n        document.write(&quot;Tama\u00f1o: &quot; + img.width + &quot;x&quot; + img.height + &quot;&lt;br&gt;&quot;);\r\n        \/\/ intentamos cargar la segunda imagen\r\n        return loadImg(&quot;sample2.jpg&quot;);\r\n    }\r\n).then(\r\n    img =&gt; { \r\n        \/\/ mostramos informaci\u00f3n de la segunda imagen\r\n        document.write(&quot;Tama\u00f1o: &quot; + img.width + &quot;x&quot; + img.height); \r\n        document.close();\r\n    }\r\n);\r\n<\/pre>\n<p>Es importante recordar que esto es solo un ejemplo y que cargar im\u00e1genes de forma secuencial no tiene mucho sentido. Sin embargo, en el caso de otro tipo de recursos, como por ejemplo scripts, puede resultar muy \u00fatil.<\/p>\n<p>Veamos ahora la versi\u00f3n con async\/await del c\u00f3digo anterior, y adem\u00e1s, esta vez con gesti\u00f3n de errores y la posibilidad de cargar f\u00e1cilmente mas de dos im\u00e1genes:<\/p>\n<pre>\r\n(async () =&gt; { \/\/ funci\u00f3n flecha an\u00f3nima y as\u00edncrona\r\n    try {\r\n        var pics = [&quot;sample1.jpg&quot;, &quot;sample2.jpg&quot;];\r\n        for (var i=0;i&lt;pics.length;i++) {\r\n            var img = await loadImg(pics[i]);\r\n            document.write(&quot;Tama\u00f1o: &quot; + img.width + &quot;x&quot; + img.height + &quot;&lt;br&gt;&quot;);\r\n        };\r\n    } catch(err) {\r\n        document.write(err.message);        \r\n    }   \r\n    document.close(); \r\n})(); \/\/ los () al final hacen que se invoque inmediatamente\r\n<\/pre>\n<p>Tal y como se puede observar, el c\u00f3digo dentro de la funci\u00f3n as\u00edncrona es m\u00e1s claro y sencillo, y no se parece en nada al t\u00edpico c\u00f3digo as\u00edncrono. Para hacer el c\u00f3digo m\u00e1s breve, en esta versi\u00f3n con async\/await hemos usado adem\u00e1s una funci\u00f3n flecha an\u00f3nima que invocamos inmediatamente tras su declaraci\u00f3n.<\/p>\n<p>Tambi\u00e9n podemos cargar recursos de forma paralela con los m\u00e9todos est\u00e1ticos <strong>race()<\/strong> y <strong>all()<\/strong> de la clase Promise, ya que como vimos devuelven una promesa. Veamos c\u00f3mo ser\u00eda el ejemplo del m\u00e9todo <strong>all()<\/strong> usando async\/await:<\/p>\n<pre>\r\n(async () =&gt; { \r\n    try {\r\n        document.write(&quot;Cargando im\u00e1genes, por favor espera...&quot;);\r\n        var imagenes = [&quot;sample1.jpg&quot;, &quot;sample2.jpg&quot;, &quot;sample3.jpg&quot;];\r\n        var resultado = await Promise.all(imagenes.map(loadImg));\r\n        document.write(&quot;Todas las im\u00e1genes se han cargado con \u00e9xito!&quot;); \r\n        imagenes.forEach((src)=&gt;{\r\n            var img = document.createElement('img');\r\n            img.src = src;\r\n            document.body.appendChild(img);\r\n        });\r\n    } catch (err) {\r\n        document.write(err.message);\r\n    }\r\n    document.close();\r\n})(); \r\n<\/pre>\n<p>Y nada m\u00e1s. Espero que este art\u00edculo os haya resultado tan interesante como el anterior.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En un anterior art\u00edculo vimos como funcionaban las promesas en JavaScript. Sin embargo, existe otra forma de trabajar con promesas que nos permitir\u00e1 escribir un c\u00f3digo m\u00e1s simple y sencillo. Para ello hemos de utilizar las palabras clave async\/await. Hay que tener en cuenta que&#8230;<\/p>\n","protected":false},"author":23,"featured_media":8510,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_ef_editorial_meta_date_first-draft-date":"","_ef_editorial_meta_paragraph_assignment":"","_ef_editorial_meta_checkbox_needs-photo":"","_ef_editorial_meta_number_word-count":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[7,5],"tags":[253,679],"class_list":["post-8501","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-diseno-web","category-programacion","tag-javascript","tag-promesas"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Async\/Await, otra forma de usar promesas en JavaScript - Blog Escola Espai<\/title>\n<meta name=\"description\" content=\"\u00bfComo pueden async\/await ayudarnos a escribir c\u00f3digo JavaScript m\u00e1s sencillo cuando usamos promesas? Veamos algunos ejemplos con c\u00f3digo fuente.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Async\/Await, otra forma de usar promesas en JavaScript - Blog Escola Espai\" \/>\n<meta property=\"og:description\" content=\"\u00bfComo pueden async\/await ayudarnos a escribir c\u00f3digo JavaScript m\u00e1s sencillo cuando usamos promesas? Veamos algunos ejemplos con c\u00f3digo fuente.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Escola Espai\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-15T17:40:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-09-13T18:43:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2019\/05\/featured.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Abel Camarena\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Abel Camarena\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/\"},\"author\":{\"name\":\"Abel Camarena\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\"},\"headline\":\"Async\/Await, otra forma de usar promesas en JavaScript\",\"datePublished\":\"2019-05-15T17:40:19+00:00\",\"dateModified\":\"2021-09-13T18:43:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/\"},\"wordCount\":863,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2019\/05\/featured.jpg\",\"keywords\":[\"javascript\",\"promesas\"],\"articleSection\":[\"Dise\u00f1o Web\",\"Programaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/\",\"url\":\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/\",\"name\":\"Async\/Await, otra forma de usar promesas en JavaScript - Blog Escola Espai\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2019\/05\/featured.jpg\",\"datePublished\":\"2019-05-15T17:40:19+00:00\",\"dateModified\":\"2021-09-13T18:43:08+00:00\",\"author\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\"},\"description\":\"\u00bfComo pueden async\/await ayudarnos a escribir c\u00f3digo JavaScript m\u00e1s sencillo cuando usamos promesas? Veamos algunos ejemplos con c\u00f3digo fuente.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#primaryimage\",\"url\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2019\/05\/featured.jpg\",\"contentUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2019\/05\/featured.jpg\",\"width\":1000,\"height\":500,\"caption\":\"Async\/Await\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.espai.es\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Async\/Await, otra forma de usar promesas en JavaScript\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.espai.es\/blog\/#website\",\"url\":\"https:\/\/www.espai.es\/blog\/\",\"name\":\"Blog Escola Espai\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.espai.es\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\",\"name\":\"Abel Camarena\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g\",\"caption\":\"Abel Camarena\"},\"sameAs\":[\"http:\/\/www.espai.es\"],\"url\":\"https:\/\/www.espai.es\/blog\/author\/abel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Async\/Await, otra forma de usar promesas en JavaScript - Blog Escola Espai","description":"\u00bfComo pueden async\/await ayudarnos a escribir c\u00f3digo JavaScript m\u00e1s sencillo cuando usamos promesas? Veamos algunos ejemplos con c\u00f3digo fuente.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/","og_locale":"es_ES","og_type":"article","og_title":"Async\/Await, otra forma de usar promesas en JavaScript - Blog Escola Espai","og_description":"\u00bfComo pueden async\/await ayudarnos a escribir c\u00f3digo JavaScript m\u00e1s sencillo cuando usamos promesas? Veamos algunos ejemplos con c\u00f3digo fuente.","og_url":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/","og_site_name":"Blog Escola Espai","article_published_time":"2019-05-15T17:40:19+00:00","article_modified_time":"2021-09-13T18:43:08+00:00","og_image":[{"width":1000,"height":500,"url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2019\/05\/featured.jpg","type":"image\/jpeg"}],"author":"Abel Camarena","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Abel Camarena","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#article","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/"},"author":{"name":"Abel Camarena","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897"},"headline":"Async\/Await, otra forma de usar promesas en JavaScript","datePublished":"2019-05-15T17:40:19+00:00","dateModified":"2021-09-13T18:43:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/"},"wordCount":863,"commentCount":0,"image":{"@id":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2019\/05\/featured.jpg","keywords":["javascript","promesas"],"articleSection":["Dise\u00f1o Web","Programaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/","url":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/","name":"Async\/Await, otra forma de usar promesas en JavaScript - Blog Escola Espai","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#primaryimage"},"image":{"@id":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2019\/05\/featured.jpg","datePublished":"2019-05-15T17:40:19+00:00","dateModified":"2021-09-13T18:43:08+00:00","author":{"@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897"},"description":"\u00bfComo pueden async\/await ayudarnos a escribir c\u00f3digo JavaScript m\u00e1s sencillo cuando usamos promesas? Veamos algunos ejemplos con c\u00f3digo fuente.","breadcrumb":{"@id":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#primaryimage","url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2019\/05\/featured.jpg","contentUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2019\/05\/featured.jpg","width":1000,"height":500,"caption":"Async\/Await"},{"@type":"BreadcrumbList","@id":"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.espai.es\/blog\/"},{"@type":"ListItem","position":2,"name":"Async\/Await, otra forma de usar promesas en JavaScript"}]},{"@type":"WebSite","@id":"https:\/\/www.espai.es\/blog\/#website","url":"https:\/\/www.espai.es\/blog\/","name":"Blog Escola Espai","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.espai.es\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897","name":"Abel Camarena","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g","caption":"Abel Camarena"},"sameAs":["http:\/\/www.espai.es"],"url":"https:\/\/www.espai.es\/blog\/author\/abel\/"}]}},"jetpack_featured_media_url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2019\/05\/featured.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/8501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/comments?post=8501"}],"version-history":[{"count":13,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/8501\/revisions"}],"predecessor-version":[{"id":12279,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/8501\/revisions\/12279"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media\/8510"}],"wp:attachment":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media?parent=8501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/categories?post=8501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/tags?post=8501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}