await sin async en NodeJs

[vc_row el_class=”blog-info”][vc_column][vc_single_image source=”featured_image” img_size=”full” style=”vc_box_rounded”][vc_empty_space height=”40px”][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text el_class=”font-weight-bold”]

await() sin async()⇒{…} en NodeJs

Await – Esta es mi definición de un mundo perfecto en el que no necesita una función async para aprovechar una palabra clave await.

Aquí hay un ejemplo de mi archivo index.js dentro de un proyecto nodeJs:

[/vc_column_text][vc_empty_space height=”40px”][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text]

await


 

function promise() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
name: "Peter",
id: "asmdhajkdhajdsh8qweuqoweuiqepoi-0q-0eueiuaisjdaKcjaisku",
});
});
});
}

let data = await promise();
console.log(data);
// Output of node index.js
{
name: 'Shivang',
id: 'asmdhajkdhajdsh8qweuqoweuiqepoi-0q-0eueiuaisjdaKcjaisku'
}

Como puede ver, no se utiliza ninguna función async para realizar una llamadaawait. Debe estar preguntándose cómo se hace esto y créame, es bastante simple…

Todo lo que tiene que hacer es agregar una configuración simple, “type” con “module” como su valor en el archivo package.json. Aquí hay un ejemplo:

{
"name": "src",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type":"module", // I'm here!
"scripts": {
"test": "echo \\"Error: no test specified\\" && exit 1"
},
"author": "",
"license": "ISC"
}

Voila 🎉, ya no necesita la función asíncrona para usar una declaración de espera.

Pero espere, ¿cómo sucede esto?

Dentro de un package.json, el valor de “type” de “module” le dice a NodeJs que interprete los archivos con la extensión .js como si usaran la sintaxis del módulo ES, por ejemplo: instrucción de import o expresiones de import().

Hay dos valores posibles para la configuración de “tipo”:

  • módulo
  • commonjs (predeterminado)

Hay formas de mezclar las cosas sin agregar type al archivo package.json. Como sabemos que commonjs es el valor predeterminado que se aplica a su proyecto NodeJs, todos los archivos con la extensión .js se tratarán como CommonJS.

Pero si aún desea interpretar un archivo como si usara el módulo ES, simplemente asigne al archivo la extensión .mjs.

Aquí está el código de muestra (sin configuración de type):

{
"name": "src",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \\"Error: no test specified\\" && exit 1"
},
"author": "",
"license": "ISC"
}

Esta  es la captura de pantalla del archivo .mjs:

await

Aquí está el código dentro de index.mjs (exactamente el mismo código que el anterior):

function promise() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
name: "Peter",
id: "asmdhajkdhajdsh8qweuqoweuiqepoi-0q-0eueiuaisjdaKcjaisku",
});
});
});
}

let data = await promise();
console.log(data);

El resultado:

await

Aquí hay algunos puntos directamente de la documentación oficial de NodeJs

  1. Los archivos que terminan en .mjs siempre se cargan como módulos ES, independientemente del package.json mas cercano.
  2. Los archivos que terminan en .cjs siempre se cargan como CommonJS, independientemente del package.json mas cercano.

Gracias por llegar hasta aquí, si encuentras esto útil no olvides dejar un👍🏼y suscribirse para recibir más contenido.

Si le interesa, puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre AWS y Laravel:

[/vc_column_text][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row el_class=”social-info”][vc_column width=”1/6″][/vc_column][vc_column width=”2/3″][vc_row_inner][vc_column_inner width=”1/2″][vc_column_text][social_share_button themes=’theme1′][/vc_column_text][/vc_column_inner][vc_column_inner el_class=”youtube-inner-col” width=”1/2″][vc_column_text][likebtn theme=”youtube” lang=”auto” show_like_label=”0″ white_label=”1″ alignment=”right”][/vc_column_text][/vc_column_inner][/vc_row_inner][vc_row_inner el_class=”social-info-inner”][vc_column_inner width=”1/4″][vc_single_image image=”921″][/vc_column_inner][vc_column_inner width=”3/4″][vc_column_text]

Diego Pacheco

Ingeniero en Sitemas, MBA (Babson College). Desarrollador PHP/Java/JavaScript. Fundador & CEO de EpicStudio. Entusiasta de las tecnologías web (JavaScript, Vue, Laravel, AWS, Docker) Viajes, Negocios, Surf y Growth.[/vc_column_text][asvc_list_item icon_fontawesome=”fa fa-calendar-o” icon_size=”14px”]Programar una reunión[/asvc_list_item][/vc_column_inner][/vc_row_inner][/vc_column][vc_column width=”1/6″][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

Recent Post

[/vc_column_text][lvca_posts_carousel posts_query=”size:3|order_by:rand|post_type:post” image_linkable=”true” image_size=”full” taxonomy_chosen=”post_tag” display_title=”true” display_post_date=”true” display_summary=”true” autoplay_speed=”3000″ animation_speed=”300″ display_columns=”3″ scroll_columns=”3″ gutter=”3″ tablet_display_columns=”2″ tablet_scroll_columns=”2″ tablet_gutter=”3″ tablet_width=”800″ mobile_display_columns=”1″ mobile_scroll_columns=”1″ mobile_gutter=”3″ mobile_width=”480″][vc_empty_space height=”20px”][/vc_column][/vc_row]