Tengo algunas funciones asíncronas que he usado en varios proyectos, sin embargo, cuando las agregué a otro proyecto, de repente no funcionan.
Un ejemplo de una de estas funciones es:
const ddbGet = async (params) => { try { const data = await docClient.get(params).promise(); return data; } catch (err) { console.log("Failure", err.message); return false; } };El error que arroja es:
const ddbGet = async (params) => { ^Error de sintaxis: símbolo inesperado (
Sin embargo, sé que no hay problemas con la sintaxis de las funciones, ya que se usan con éxito en otros lugares.
He visto algunas respuestas a otras preguntas que sugirieron algunos problemas con JSHint y ESLint; sin embargo, no creo que estuviera usando ninguno de estos, pero solo para asegurarme de que instalé ESLint y especifiqué la versión ECMA como se sugiere en esas respuestas y esto todavía se lanzó el error.
También me aseguré de estar usando la última versión de Node.js.
Y si elimino esas funciones, aparece un error debido a una función asíncrona en la carpeta node_modules.
async handshake(transportName, req, closeConnection) {
`^^^^^^^^^`ErrorDeSintáxis: Identificador Inesperado
¿Alguien sabe cuál podría ser el problema? Gracias.
Dado que la documentación, o más bien el Getting Started de AWS Cloud9, no se mantiene actualizado (usando un script antiguo para instalar NVM) y viendo que el proyecto era muy antiguo (según la sección de comentarios ampliados de la pregunta), seguramente fue la versión de NodeJS.
Esto está confirmado por la salida nvm ls que nos dio el OP (solo lo formateé):
v6.15.1 -> v17.2.0 system default -> 6 (-> v6.15.1) node -> stable (-> v17.2.0) (default) stable -> 17.2 (-> v17.2.0) (default) iojs -> N/A (default) lts/* -> lts/argon (-> N/A) lts/argon -> v4.9.1 (-> N/A) lts/boron -> v6.17.1 (-> N/A) lts/carbon -> v8.17.0 (-> N/A) lts/dubnium -> v10.24.1 (-> N/A) lts/erbium -> v12.22.9 (-> N/A) lts/fermium -> v14.18.3 (-> N/A) lts/gallium -> v16.13.2 (-> N/A) La línea default -> 6 (-> v6.15.1) nos informa que la versión predeterminada de NodeJS utilizada (para todo el sistema) es v6.15.1 .
Desafortunadamente, NodeJS NO maneja la sintaxis async/await de forma nativa antes v7.6 .
Podría ejecutar nvm install 17.2.0 y luego nvm use 17.2.0 (o simplemente la parte de nvm use , pero no sé si la v17.2.0 que vemos en la salida se ha instalado efectivamente a través de NVM), lo cual es probable para solucionar este problema en particular.
¡He encontrado la solución con un poco más de investigación después de que Gaëtan Boyals me puso en el camino correcto!
Tenía razón en que la versión predeterminada de Node.js era el problema y la solución para solucionarlo era nvm alias default 17.2.0