Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

139
Visualizações
AbortController.abort(motivo), pero el motivo se pierde antes de que llegue a la cláusula fetch catch

Estoy implementando llamadas de recuperación abortables .

Hay básicamente dos razones para abortar la búsqueda en mi página:

  • el usuario decide que no quiere esperar más por los datos AJAX y hace clic en un botón; en este caso, la interfaz de usuario muestra un mensaje "llamada/lo que haya interrumpido"
  • el usuario se ha movido a otra parte de la página y los datos que se están recuperando ya no son necesarios; en este caso, no quiero que la interfaz de usuario muestre nada, ya que solo confundiría al usuario

Para discriminar los dos casos, estaba planeando usar el parámetro de reason del método AbortController.abort , pero la cláusula .catch en mi llamada de búsqueda siempre recibe una DOMException('The user aborted a request', ABORT_ERROR) .

Intenté proporcionar una DOMException diferente como motivo de la cancelación en el caso 2, pero se perdió la diferencia.

¿Alguien ha encontrado cómo enviar información a la cláusula fetch .catch con respecto a la razón para abortar?

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

En el siguiente ejemplo, demuestro cómo determinar el motivo de un aborto de una solicitud de fetch . Proporciono comentarios en línea para la explicación. Siéntase libre de comentar si algo no está claro.

Vuelva a ejecutar el fragmento de código para ver un resultado aleatorio (potencialmente diferente)

 'use strict'; function delay (ms, value) { return new Promise(res => setTimeout(() => res(value), ms)); } function getRandomInt (min = 0, max = 1) { return Math.floor(Math.random() * (max - min + 1)) + min; } // Forward the AbortSignal to fetch: // https://docs.github.com/en/rest/repos/repos#list-public-repositories function fetchPublicGHRepos (signal) { const headers = new Headers([['accept', 'application/vnd.github+json']]); return fetch('https://api.github.com/repositories', {headers, signal}); } function example () { const ac = new AbortController(); const {signal} = ac; const abortWithReason = (reason) => delay(getRandomInt(1, 5)) .then(() => { console.log(`Aborting ${signal.aborted ? 'again ' : ''}(reason: ${reason})`); ac.abort(reason); }); // Unless GitHub invests HEAVILY into our internet infrastructure, // one of these promises will resolve before the fetch request abortWithReason('Reason A'); abortWithReason('Reason B'); fetchPublicGHRepos(signal) .then(res => console.log(`Fetch succeeded with status: ${res.status}`)) .catch(ex => { // This is how you can determine if the exception was due to abortion if (signal.aborted) { // This is set by the promise which resolved first // and caused the fetch to abort const {reason} = signal; // Use it to guide your logic... console.log(`Fetch aborted with reason: ${reason}`); } else console.log(`Fetch failed with exception: ${ex}`); }); delay(10).then(() => console.log(`Signal reason: ${signal.reason}`)); } example();

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda