Obtengo mensajes cada segundo después de que la llamada anterior se realizó correctamente. El problema es que, a veces, la llamada tarda 2 segundos en finalizar . Durante ese tiempo, puedo navegar hacia atrás, elegir a otra persona y abrir la conversación con él.
Ahora, la llamada anterior es exitosa y llena el área con datos de conversación del UsuarioA y del UsuarioB . Además, obtiene continuamente las conversaciones tanto para el UsuarioA como para el UsuarioB.
Sospecho que tal vez debería usar clearTimeout(interval) en lugar de clearTimeout(fetchConversationInterval) , o usar un código mejor.
Pero también, ¿cómo puedo abortar la llamada aún sin terminar si el usuario navega hacia atrás mientras se recuperan los mensajes?
Tengo el siguiente código:
en datos()
fetchConversationInterval: null,En montado ():
this.messagesFetchingInterval()Y en beforeDestroy()
clearTimeout(this.fetchConversationInterval)En métodos:
async messagesFetchingInterval () { let that = this this.fetchConversationInterval = setTimeout(async function interval () { await that.getConversation(that.peerProfile.user_id) .finally(()=> { if (that.currentRoute === '/direct-messages/conversation') { that.fetchConversationInterval = setTimeout(interval, 1000) } }) }, 1000) },Las funciones asíncronas (en su caso, getConversation) devuelven su suscripción. puede guardarlo en un parámetro y luego cancelar su suscripción al destruirlo.
var mySubscription; this.mySubscription = someAsyncFunc().subscribe((result) => { console.log(result); }) ngOnDestroy(){ this.mySubscription.unsubscribe(); }