Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

197
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda