Quiero crear una función de recordatorio de la tarea. Básicamente, la idea es que en mi aplicación de notas, mientras cualquier usuario crea su tarea, en ese momento le pido un recordatorio de fecha y hora y luego lo almaceno en la base de datos y cuando llegue esa fecha y hora, enviaré un correo electrónico de ese particular. Nota.
Para lograr esto, mi lógica es convertir la fecha y hora del recordatorio de DB en segundos y obtengo la fecha y hora actual y también la convierto en segundos. Después de eso hago la operación - let msgTime = recordar - currentDateSec. donde currentDateSec es la fecha y hora actual y recordar es la fecha y hora de la base de datos. y luego guárdelo en la variable msgTime.
Cuando msgTime == 0, enviaré el correo de recordatorio a la identificación de correo de registro del usuario. Pero aquí escribí Hola con fines de prueba y este Hola se está imprimiendo 2 veces en la consola, y no lo quiero. Quiero imprimirlo solo una vez.
Para verificar cada segundo, llamé a mi función en setinterval y la ejecuté después de 1000 ms.
const [notes, setNotes] = useState([]);
useEffect(() => {
function checkReminder() {
let remind = 0;
let currentDate = new Date();
let currentDateSec = Math.floor(currentDate.getTime() / 1000);
for (let index = 0; index < notes.length; index++) {
remind = notes[index].reminderTime;
let msgTime = remind - currentDateSec;
console.log(msgTime);
if (msgTime === 0) {
console.log("hi");
clearInterval(interval);
}
}
}
const interval = setInterval(() => {
checkReminder();
}, 1000);
})Este código es para obtener las notas de la base de datos.
const fetchNotes = async () => {
try {
let res = await axios.get("/api/notes", config);
setNotes(res.data);
// console.log(notes);
} catch (err) {
setError(err.response.res);
}
};
- Ver la salida del terminal aquí -
Salida del terminal
Solución del problema
agregue esta declaración de retorno a su useEffect
función y creo que estará bien:
useEffect(() => {
function checkReminder() {
let remind = 0;
let currentDate = new Date();
let currentDateSec = Math.floor(currentDate.getTime() / 1000);
for (let index = 0; index < notes.length; index++) {
remind = notes[index].reminderTime;
let msgTime = remind - currentDateSec;
console.log(msgTime);
if (msgTime === 0) {
console.log("hi");
clearInterval(interval);
}
}
}
const interval = setInterval(() => {
checkReminder();
}, 1000);
return () => {
clearInterval(interval);
};
})
No hay comentarios:
Publicar un comentario