Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

257
Views
No se puede eliminar el oyente de Firestore dentro de una función

Mi ejemplo de código se parece a lo siguiente:

 useEffect(() => { specialfunction();//listener for chat operations }, []); const specialfunction = async() => { var mylistener = firebase.firestore()...onSnapshot((snapshot) => { //do something with the docs retrieved }); //my unlucky try to remove the listener after I leave the screen return () => { try{ mylistener(); console.log("LISTENER REMOVED") }catch(error){console.log(error)}; } };

Por lo general, si desea eliminar un oyente de Firestore, simplemente llame a la variable a la que lo adjuntó, en mi ejemplo, 'mylistener ()'. Desafortunadamente, mi oyente no se detiene. Después de salir de la pantalla y volver a entrar varias veces y recibir un documento, noto que mi oyente dispara varias veces. Tampoco puedo detenerlo fuera de mi 'función especial' porque no es un oyente de base de datos donde solo puedo llamar a la referencia nuevamente y detenerlo, se trata de un oyente de Firestore aquí.

Tampoco puedo poner 'mylistener' fuera de la 'función especial', debe permanecer dentro.

¿Pueden ayudarme a detener 'mylistener' después de salir de la pantalla?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

No estoy particularmente bien versado en firebase pero si desea eliminar el detector de eventos cuando se trata del gancho useEffect , la plantilla debería ser la siguiente

 useEffect(() => { window.addEventListener("keyup", handleKeyUp) return () => window.removeEventListener("keyup", handleKeyUp) }, [collapsed, handleKeyUp])

Tenga en cuenta que en su gancho useEffect necesita return una función que elimine el detector de eventos

about 4 years ago · Juan Pablo Isaza Report

0

La clave para esta solución fue otra publicación pero bajo un tema diferente . Es importante entender que debe predefinir una variable y luego sobrescribirla con el oyente de Firestore. En este caso, podrá separar el oyente en la parte de retorno del 'useEffect'-Hook una vez que salga de la pantalla, el código se ve así ahora:

 let mylistener; useEffect(() => { specialfunction();//listener for chat operations return () => { try{ mylistener(); //here you need to remove the listener console.log("LISTENER REMOVED") }catch(error){console.log(error)}; } }, []); const specialfunction = async() => { var mylistener = firebase.firestore()...onSnapshot((snapshot) => { //do something with the docs retrieved }); };

Además, la 'función especial' no necesita ser asíncrona, pero hago llamadas asíncronas dentro de esta función, depende de usted.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!