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

112
Vistas
Intentando crear una función que crearía una publicación programada basada en la hora y la fecha

Básicamente, tratando de crear una aplicación de tablero de mensajes que permita a los usuarios escribir publicaciones. Quiero poder escribir publicaciones para el futuro, por ejemplo, en 5 minutos. El problema con esta función es que incluso con setTimeout() y la diferencia de tiempo (segundos) no funciona según lo previsto, sino que solo se publica tan pronto como se envía la publicación. Estoy usando firebase y reacciono en este proyecto. messageref se refiere a la colección!

 const sendMessage = async (e) => { const now = new Date().getTime() console.log(now); const seconds = (time - now)/1000 console.log(seconds); e.preventDefault(); if(formValue === ""){ alert("must enter a message!") } if(seconds === 0){ await messageRef .add({ text: formValue, timestamp: firebase.firestore.FieldValue.serverTimestamp(), }) setFormValue("") pag.current.scrollIntoView({ behavior: "smooth" }) } else if(seconds > 0){ setTimeout(async () => { await messageRef .add({ text: formValue, timestamp: time, }) setFormValue("") pag.current.scrollIntoView({ behavior: "smooth" }) }, seconds) }else { alert('cant send a post in the past') } };
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El error es que está pasando un valor en segundos a setTimeout , mientras que toma un valor en milisegundos . Así que para arreglarlo:

 setTimeout(async () => { await messageRef .add({ text: formValue, timestamp: time, }) setFormValue("") pag.current.scrollIntoView({ behavior: "smooth" }) }, seconds*1000) // 👆

Un fragmento de código más largo:

 const time = Date.now() + 5000; // in 5 seconds const formValue = "Hello world"; const now = new Date().getTime() console.log(now); const seconds = (time - now)/1000 console.log(seconds); if(formValue === ""){ alert("must enter a message!") } if(seconds === 0){ console.log("Sending now"); } else if(seconds > 0){ console.log("Sending in "+seconds+"s"); setTimeout(async () => { console.log("Sending now"); }, seconds*1000) }else { alert('cant send a post in the past') }

Recomiendo reproducir siempre los problemas en este formato, ya que facilita la ayuda de la gente.

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