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

140
Visualizações
La recuperación de JavaScript se retrasa

Tengo un servidor Express esperando que mi sitio web haga algo. Cuando mi sitio hace algo, se debe llamar a un script de shell en el servidor Express. El problema es: el script de shell solo se ejecuta después de que se haya aceptado o denegado la "ventana de confirmación". Quiero que la recuperación ocurra lo antes posible. Ni siquiera necesitaría obtener nada del servidor Express, solo quiero indicarle a Express que ejecute el script de shell lo antes posible.

Tengo este código en el sitio web:

 messaging.onMessage(function (payload){ fetch("http://localhost:9000/testAPI") .then(res => res.text()) .then(res => console.log("something:" + res)); var r = confirm(callingname + " is calling."); if (r == true) { window.open(payload.data.contact_link, "_self"); } else { console.log("didn't open"); } });

Tengo este código en el backend:

 var express = require("express"); var router = express.Router(); router.get("/", function(req,res,next){ const { exec } = require('child_process'); exec('bash hi.sh', (error, stdout, stderr) => { console.log(stdout); console.log(stderr); if (error !== null) { console.log(`exec error: ${error}`); } }); res.send("API is working"); }); module.exports = router;
about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

confirm() está bloqueando, y solo tiene un hilo. Esto significa que confirm() detendrá el mundo para su aplicación, evitando que fetch() haga algo.

Como la solución más simple posible, puede intentar retrasar el momento en que se invoca confirm() . Esto permitiría que fetch() obtenga la solicitud.

 messaging.onMessage(function (payload) { fetch("http://localhost:9000/testAPI") .then(res => res.text()) .then(text => console.log("something:" + text)); setTimeout(function () { if (confirm(`${callingname} is calling.`)) { window.open(payload.data.contact_link, "_self"); } else { console.log("didnt open"); } }, 50); });

Otras opciones serían poner confirm() en una de las devoluciones de llamada .then() de fetch, o usar una alternativa sin bloqueo para confirm() , como se sugiere en los comentarios.

about 4 years ago · Santiago Trujillo 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