await sin async en NodeJs

await

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:

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:

Recent Post