fix: corregir race condition en cancelacion de tokens (polylines huerfanas)
This commit is contained in:
@ -272,7 +272,15 @@ async function initializeMap() {
|
||||
|
||||
// MARKER RECYCLING & REACTIVITY OPTIMIZATION
|
||||
function clearMapMarkers() {
|
||||
// Cancelar cualquier operación async en vuelo ANTES de limpiar el mapa.
|
||||
// Sin esto, una llamada a encontrarParadaCercana que termine después del cleanup
|
||||
// dibuja una polilínea huérfana que nunca se limpia.
|
||||
currentCancelToken.cancelled = true;
|
||||
currentCancelToken = { cancelled: false }; // token limpio para la próxima operación
|
||||
isUpdatingMarkers.value = false; // liberar lock
|
||||
|
||||
limpiarTodoCentralizado();
|
||||
limpiarCaminata(); // garantizar que el ref de la polyline de caminata quede limpio
|
||||
|
||||
// Limpiar también los marcadores de las unidades (buses)
|
||||
if (unitMarkers.value.size > 0) {
|
||||
@ -299,7 +307,7 @@ function reDrawUserMarker() {
|
||||
}
|
||||
|
||||
async function updateMapMarkers(skipZoom = false) {
|
||||
if (!isLoaded.value || !map.value || isUpdatingMarkers.value) return;
|
||||
if (!isLoaded.value || !map.value) return;
|
||||
|
||||
const currentRequestRouteId = routeStore.selectedRouteId;
|
||||
if (!currentRequestRouteId) {
|
||||
@ -307,7 +315,14 @@ async function updateMapMarkers(skipZoom = false) {
|
||||
return;
|
||||
}
|
||||
|
||||
// ── CANCELACIÓN EXPLÍCITA: invalidar la operación anterior en vuelo.
|
||||
// Si NO se hace esto, el token viejo queda en cancelled=false y la
|
||||
// encontrarParadaCercana anterior dibuja una polilínea huérfana al completarse.
|
||||
currentCancelToken.cancelled = true;
|
||||
isUpdatingMarkers.value = false; // liberar lock antes de crear el nuevo
|
||||
|
||||
// Capturar el token de generación ANTES de cualquier await
|
||||
markerGenerationId.value++;
|
||||
const myGeneration = markerGenerationId.value;
|
||||
// Crear un token de cancelación para esta operación específica
|
||||
const myToken = { cancelled: false };
|
||||
|
||||
Reference in New Issue
Block a user