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

137
Vistas
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 Respuestas
Responde la pregunta

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 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