Nivel superior espera no trabajar en el nodo JS 14.15.3 -- javascript campo con node.js camp Relacionados El problema

Top level await not working in Node JS 14.15.3


0
vote

problema

Español

Estoy en la versión de nodo de ejecución 14.15.3

Welcome to Node.js v14.15.3.

Pensé que era genial que pudiera usar A.print()0 ahora en los scripts de nivel superior, así lo intenté. Para no mi sorpresa, no funcionó.

  A.print()111  

SyntaxArror: AWAIT solo es válido en la función Async en Wrapsafe (internos / módulos / cjs / loader.js: 979: 16) en Module._Compile (interno / módulos / cjs / loader.js: 1027: 27) en el objeto.module._extensions..js (internos / módulos / cjs / loader.js: 1092: 10) en Module.load (interno / módulos / cjs / loader.js: 928: 32) en la función.module._load (interna / módulos / cjs / loader.js: 769: 14) en la función.executeuserentrypoint [como RunMain] (interno / módulos / run_main.js: 72: 12) en interno / principal / run_main_module.js: 17: 47

No estoy seguro de qué más decir. Simplemente no funciona. ¿Se rompió? ¿Alguna vez realmente funcionó?

Original en ingles

I am on running Node version 14.15.3

Welcome to Node.js v14.15.3.

I thought it was cool that you could use await now in top level scripts, so I tried it. To not my surprise, it didn't work.

const myfunc = async () => {     return new Promise((res, rej) => {         setTimeout(() => {res()},1000)     }) } await myfunc(); 

SyntaxError: await is only valid in async function at wrapSafe (internal/modules/cjs/loader.js:979:16) at Module._compile (internal/modules/cjs/loader.js:1027:27) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10) at Module.load (internal/modules/cjs/loader.js:928:32) at Function.Module._load (internal/modules/cjs/loader.js:769:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) at internal/main/run_main_module.js:17:47

Not sure what else to say. It just doesn't work.. Did it break? Did it ever really work?

     
       
       

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Await de nivel superior funciona dentro de los módulos ECMASCRIPT. De forma predeterminada, los NODEJs no usan estos, y en su lugar, utiliza módulos de CommonJS. Hay algunas formas de habilitar los módulos ES6 en el proyecto de su nodo, ya que como se describe aquí :

node.js tratará los siguientes módulos AS cuando se pasan al nodo como la entrada inicial, o cuando se hace referencia por las declaraciones de importación dentro del código de módulo ES:

  • archivos que terminan en .mjs.

  • Los archivos que terminan en .js cuando el archivo Package.json de padres más cercano contiene un campo de nivel superior "Tipo" con un valor de "Módulo".

  • cadenas pasadas como un argumento a --eval o -print, o canalizado al nodo a través de stdin, con la bandera - enput-type = módulo

Si usa uno de los enfoques anteriores para habilitar los módulos ES6 dentro de su proyecto, podrás usar el nivel superior AWAIT:

script.mjs (nota el .mjs):

  const myfunc = async () => {   return new Promise((res, rej) => {       setTimeout(() => {res("Hello")}, 1000)   }) } console.log(await myfunc()); // logs "Hello" after ~1s   
 

Top-level await works within ECMAScript modules. By default, NodeJS doesn't use these, and instead, it uses CommonJS modules. There are a few ways to enable ES6 modules in your node project though as outlined here:

Node.js will treat the following as ES modules when passed to node as the initial input, or when referenced by import statements within ES module code:

  • Files ending in .mjs.

  • Files ending in .js when the nearest parent package.json file contains a top-level field "type" with a value of "module".

  • Strings passed in as an argument to --eval or --print, or piped to node via STDIN, with the flag --input-type=module

If you use one of the above approaches to enable ES6 modules within your project, then you'll be able to use top-level await:

script.mjs (note the .mjs):

const myfunc = async () => {   return new Promise((res, rej) => {       setTimeout(() => {res("Hello")}, 1000)   }) } console.log(await myfunc()); // logs "Hello" after ~1s 
 
 

Relacionados problema

0  ¿Qué está mal con mi promesa, la función ASYNC / AWAIT está devolviendo las matrices vacías?  ( Whats wrong with my promise async await function both are returning empty arrays ) 
Tengo una variedad de objetos en mi código que se muestra a continuación [ { name: 'JMCP', priority: 1 }, { name: 'OTC', priority: 2 }, { name: 'CMT', ...

0  Async.achseries me da una gama: la pila de llamadas máxima excedida  ( Async eachseries gives me an rangeerror maximum call stack exceeded ) 
Quiero iterar más de 4435 productos en una colección. Para cada producto quiero descargar la imagen y subirlo a un cubo de Amazon S3. Para la última parte he ...

6  Nodejs y nodo-mongodb-nativo  ( Nodejs and node mongodb native ) 
Acabando de comenzar con nodo, y tratar de obtener el controlador Mongo trabajar. Tengo mi conexión configurada, y extrañamente puedo insertar cosas. Sólo bie...

122  NODEJS - Redireccionar URL  ( Nodejs redirect url ) 
¿Cómo obtengo un servidor node.js para redirigir a los usuarios a una página 404.html cuando ingresan una URL no válida? Hice algunas buscando, y parece que...

0  Cómo convertir la fecha de ISI a ISO en JS  ( How to convert isi date to iso in js ) 
Estoy recibiendo la fecha como data.created = "Wed May 03 2017 15:41:49 GMT 0530(IST)" quiero convertirlo a Formato de ISI regular como 2017-03...

0  ¿Generar HTML o cargarlo en el mundo nodejs?  ( Generate html or load it in nodejs world ) 
Soy nuevo en el mundo de los Nodos, una pregunta noob para usted: usamos HAML, EJS, ... para generar archivos HTML. ¿Podemos cargar nuestro propio archivo HTM...

14  Heroku Server se bloquea con "JavaScript Monthip Out of Memory" al desplegar la aplicación 'react-admin'  ( Heroku server crashes with javascript heap out of memory when deploying react ) 
Actualmente estoy desarrollando un panel de administración usando 'react-admin' que funciona bien en mi local, pero tan pronto como subo la aplicación a Herok...

2  Nede.js Web Sockets Server: ¿Es mi idea para la gestión de datos estable / escalable?  ( Node js web sockets server is my idea for data management stable scalable ) 
Estoy desarrollando un RPG multijugador de HTML5 Browser con NODE.JS que se ejecuta en el backend con un complemento de sockets web para la transferencia de d...

498  Nodo / Express: Eadrinuse, dirección ya en uso - Matar al servidor  ( Node express eaddrinuse address already in use kill server ) 
Tengo un servidor simple que se ejecuta en NOde.js usando Conectar: ​​ var server = require('connect').createServer(); //actions... server.listen(3000); ...

2  Cargando datos de búfer de la base de datos como PDF  ( Loading buffer data from database as pdf ) 
He estado desarrollando una aplicación web donde el usuario puede cargar un archivo PDF y luego lo recupere y lo vea. Lo que he estado haciendo para lograrlo ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos