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

135
Vistas
Usando un CancelToken con una instancia de axios

He leído varias preguntas similares, pero todavía tengo problemas para poder cancelar mis solicitudes dada la estructura de mi código.

Al hacer clic en uno de los siguientes elementos, me gustaría poder cancelar todas las demás solicitudes, excepto la nueva, sin embargo, parece cancelar todas las solicitudes y luego evita que Axios realice nuevas. Soy nuevo en la cancelación de tokens, así que realmente no sé qué estoy haciendo mal aquí:

 import {cancelTokenSource} from 'API'; let isActiveRequest; document.body.addEventListener('click', async(e) => { const userElement = e.target.closest('.user-element'); const appElement = e.target.closest('.app-element'); if(isActiveRequest) { cancelTokenSource.cancel(); isActiveRequest = false; } if(userElement) { isActiveRequest = true; try{ const users = await Admin.getUsers(); isActiveRequest = false; // display users } catch(err) { isActiveRequest = false; } } if(appElement) { isActiveRequest = true; try{ const applications = await Admin.getApplications(); isActiveRequest = false; // display applications } catch(err) { isActiveRequest = false; } } });

API.js

 export const cancelTokenSource = axios.CancelToken.source(); export default axios.create({ baseURL: 'http://localhost:8080', cancelToken: cancelTokenSource.token });

Admin.js

 export default class Admin { getUsers({index, limit, orderField, orderDirection}) { return API.get('/admin/applicants', { params: { index, limit, orderField, orderDirection } }); } getApplications({index, limit, orderField, orderDirection}) { return JRS.get('/admin/applications', { params: { index, limit, orderField, orderDirection} }); ... }

Gracias

*** Actualizar

Pensé que tal vez necesitaba un nuevo token de cancelación por solicitud (ya que tal vez sea el token anterior el que bloquea cualquier solicitud nueva), así que intenté esto:

API.js

 export let cancelTokenSource; export default axios.create({ baseURL: 'http://localhost:8080', cancelToken: new axios.CancelToken(c => cancelTokenSource = c), });

principal.js

 if(isActiveRequest) { cancelTokenSource(); isActiveRequest = false; }

Pero sin suerte. Supongo que tal vez porque la instancia de axios es la misma para cada solicitud.

Voy a intentar agregar el token de cancelación a las funciones de Admin.js a continuación.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Sí, al agregar el token de cancelación a las solicitudes individuales, en lugar de la instancia de axios funcionó:

 import {cancelTokenSource} from 'Admin'; // Different let isActiveRequest; document.body.addEventListener('click', async(e) => { const userElement = e.target.closest('.user-element'); const appElement = e.target.closest('.app-element'); if(isActiveRequest) { cancelTokenSource(); // Different isActiveRequest = false; } if(userElement) { isActiveRequest = true; try{ const users = await Admin.getUsers(); isActiveRequest = false; // display users } catch(err) { isActiveRequest = false; } } if(appElement) { isActiveRequest = true; try{ const applications = await Admin.getApplications(); isActiveRequest = false; // display applications } catch(err) { isActiveRequest = false; } } });

API.js

 // Cancel token removed export default axios.create({ baseURL: 'http://localhost:8080', });

Admin.js

 export let cancelTokenSource; // Added from API.js export default class Admin { getUsers({index, limit, orderField, orderDirection}) { return API.get('/admin/applicants', { params: { index, limit, orderField, orderDirection }, cancelToken: new axios.CancelToken(c => cancelTokenSource = c) // Added }); } getApplications({index, limit, orderField, orderDirection}) { return JRS.get('/admin/applications', { params: { index, limit, orderField, orderDirection} cancelToken: new axios.CancelToken(c => cancelTokenSource = c) // Added }); ... }
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