Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

188
Vistas
¿Por qué no se puede enviar mediante esta sintaxis de promesa?

Normalmente, cuando se usa la sintaxis de Promise, las siguientes sintaxis producen el mismo resultado:

 // Syntax A - works fine getUser(id).then((user) => console.log(user) // Syntax B - works fine getUser(id).then(console.log)

Sin embargo, cuando intentamos esto en una ruta Express, solo funciona la sintaxis A:

 // Works app.get('/syntax_a', (req, res) => { getUser(req.body.id).then((user) => res.json(user)) }) // Fails app.get('/syntax_b', (req, res) => { getUser(req.body.id).then(res.json) })

La sintaxis B produce un error:

 UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'app' of undefined at json (/server/node_modules/express/lib/response.js:256:18) at processTicksAndRejections (internal/process/task_queues.js:97:5)

¿Por qué esto no funciona como el primer ejemplo?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El motivo es que response.json es una función que busca app en this archivo . Cuando pasa res.json , está pasando json sin ninguna referencia al objeto del que proviene, por lo this (lo más probable) es undefined ). this en JavaScript está enlazado dinámicamente , en lugar de enlazado estáticamente como lo está en un lenguaje como C# o Java.

console.log , por otro lado, no usa this y, por lo tanto, no se ve afectado por cómo lo llame.

Podemos construir algo como esto nosotros mismos:

 let _privateImplementation = (...args) => console.log(...args); let ourPrivateBoundExample = { doIt(some, info) { _privateImplementation("Doing it", some, info); } } ourPrivateBoundExample.doIt(1, 2); // Doing it 1 2 Promise.resolve("Hello there!") .then(ourPrivateBoundExample.doIt) // Doing it Hello there!
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda