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
¿Cómo ejecutar simultáneamente código de bloqueo y no bloqueo?

Necesito poder ejecutar algún código que se bloqueará y algún otro código que luego, cuando se bloquee, iniciará otras acciones.

El caso de uso es el siguiente:

Tengo un archivo, llamado index.ts , que ejecuta un servidor express y socket

Tengo un archivo de prueba, llamado test.spec.ts , que debe poder iniciar el servidor express y luego iniciar algunos comandos para ejecutar pruebas a través de una solicitud HTTP o un mensaje de socket (preferiría HTTP)

La única forma que encontré para mantener vivo el servidor web es instanciarlo con

 import { spawnSync } from 'child_process'; spawnSync('ts-node', ['path/to/index.ts"], { cwd: "path/to/workdir"});

que se bloqueará hasta que se elimine el proceso secundario (podría ser hasta 30 minutos más tarde).

¿Hay alguna forma de dividirse en dos procesos, uno que se bloquee al iniciarlo y otro que siga funcionando y exponga algunas funciones para interacciones con el archivo de prueba?

Mi objetivo se vería así:

 // index.ts import * as express from "express"; const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening on port ${port}`); });
 // test.spec.ts import { spawnSync } from 'child_process'; describe("Test",()=>{ it("Test", async ()=>{ // create somehow a child process that should block const childProcess = ... childProcess.do(spawnSync('ts-node', ['path/to/index.ts'], {cwd: 'path/to/workdir'}) //should block now // the following code should run in parallel await new Promise(r => setTimeout(r, 5000)); //wait some time until the webserver is ready fetch('http://localhost:3000').then((ret)=>{ expect(ret,'to be Hello World').to.contain('Hello World!"); }) ... // more tests }); });
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Creo que encontré la razón y una posible solución yo mismo.

El nodo siempre se ejecuta en un solo proceso, por lo tanto, no puede funcionar. Afortunadamente pude descubrir un enfoque totalmente diferente. Instalé el npm-run-all y creé un nuevo script en mi archivo package.json llamado run-p script1 script2 . De esta manera, puedo ejecutar ambos en paralelo y el proceso con el servidor web permanece vivo hasta que se ejecutan todas las pruebas.

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