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

191
Vistas
La declaración de devolución de Javascript no impide que se complete el resto de la función

Estoy utilizando la API de Docuware para engrapar (combinar) documentos. Escribí mi pregunta de la manera más simple posible para que las personas sin conocimiento de Docuware puedan entenderla.

Entonces, en mi función principal, llamo a otra función y verifico el valor de retorno de la función llamada. Si el valor es igual a cero, debería devolver un valor nulo, lo que significa que el resto de la función no debería ejecutarse.

 const lastStored = await searchDocument("Invoice", ORDER_NUMBER = '', cookie) console.log("Full id func: " + id) console.log("id[0]: " + id[0]) if (lastStored[0] === 0) { console.log("id[0]: " + id[0]) return null; };

Recibo errores extraños con mi código, por lo que tengo muchos registros de consola. Aquí están los console.logs cuando el código funciona correctamente.

 cookie set Document is Invoice (Invoice) Invoice order #: ORD83001 Current ID: 52724 Order #: ORD83001 cookie set Document is DELIVERY SLIP (DELIVERY SLIP) Invoice order #: ORD83001 DELIVERY SLIP Doc ID: 52553 Current ID: 52553 Order #: ORD83001 Full id func: 52553,ORD83001 id[0]: 52553 New Tray Doc ID: 1410 Document's successfully merged.

Ahora, con el error, los registros de consola son:

 //..... Current ID: 0 Order #: ORD83009 Full id func: 0,ORD83009 id[0]: 0 id[0]: 0 Document's successfully merged.

Lo que pasa con este error es que si id[0] fuera realmente cero, entonces el documento no podría fusionarse. Pero los documentos ESTÁN fusionados si los miro. Entonces, ¿por qué mi código devuelve 0, incluso DENTRO de mi declaración if, pero continúa ejecutándose?

¿Es algún tipo de problema de tiempo? Me gusta id[0] === 0 pero .00000001 segundos más tarde se actualiza para que el retorno nulo no siga adelante.

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

0

Esto sucede porque tiene una await entre la parte del código donde return null y donde se realiza la salida de "Documento fusionado con éxito".

Cada await es un punto en su código donde se suspende un contexto de ejecución. Dependiendo de la promesa esperada, habrá un tiempo en el futuro donde la ejecución suspendida se reanudará nuevamente. Esto puede conducir a sorprendentes secuencias de salida.

Aquí hay una demostración simple de este efecto. Observe cómo la salida en el bloque if es seguida por la salida debajo de él. Sería un error concluir que la return de alguna manera no "funcionó". Lo hizo, pero hubo otra ejecución de esta función que se suspendió (esperando que se resolviera una promesa) y se restauró solo para hacer ese resultado final:

 const something = i => new Promise(resolve => setTimeout(resolve, i * 1000)); async function demo(i) { console.log("test the value of i"); if (i == 1) { console.log("i is one, so we exit"); return null; } await something(i); console.log("performed the action"); } demo(0); demo(1);

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