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
:
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:
Aquí hay algunos puntos directamente de la documentación oficial de NodeJs
- Los archivos que terminan en
.mjs
siempre se cargan como módulos ES, independientemente delpackage.json
mas cercano. - Los archivos que terminan en
.cjs
siempre se cargan como CommonJS, independientemente delpackage.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: