Hay una nueva API para realizar solicitudes desde JavaScript: fetch (). ¿Existe algún mecanismo incorporado para cancelar estas solicitudes en vuelo?
javascript
ajax
fetch-api
Sam Lee
fuente
fuente
Respuestas:
TL / DR:
fetch
ahora soporta unsignal
parámetro a partir del 20 de septiembre de 2017, pero no todos los navegadores parecen admitirlo en este momento .ACTUALIZACIÓN 2020: la mayoría de los principales navegadores (Edge, Firefox, Chrome, Safari, Opera y algunos otros) admiten la función , que se ha convertido en parte del estándar de vida DOM . (a partir del 5 de marzo de 2020)
Sin embargo, este es un cambio que veremos muy pronto, por lo que debería poder cancelar una solicitud utilizando un
AbortController
sAbortSignal
.Versión larga
Cómo:
La forma en que funciona es la siguiente:
Paso 1 : creas un
AbortController
(Por ahora acabo de usar esto )const controller = new AbortController()
Paso 2 : obtienes la
AbortController
señal s como esta:const signal = controller.signal
Paso 3 : Pasas la
signal
búsqueda de la siguiente manera:Paso 4 : simplemente aborta cada vez que necesites:
controller.abort();
Aquí hay un ejemplo de cómo funcionaría (funciona en Firefox 57+):
Fuentes:
fuente
AbortController is not defined
. De todos modos, esto es solo una prueba de concepto, al menos las personas con Firefox 57+ pueden verlo funcionandohttps://developers.google.com/web/updates/2017/09/abortable-fetch
https://dom.spec.whatwg.org/#aborting-ongoing-activities
funciona en edge 16 (2017-10-17), firefox 57 (2017-11-14), desktop safari 11.1 (2018-03-29), ios safari 11.4 (2018-03-29), chrome 67 (2018-05 -29), y luego.
en navegadores antiguos, puede usar el polyfill whatwg-fetch de github y el polyfill AbortController . puede detectar navegadores antiguos y usar los polyfills condicionalmente también:
fuente
A partir de febrero de 2018,
fetch()
se puede cancelar con el siguiente código en Chrome (lea Uso de transmisiones legibles para habilitar el soporte de Firefox). No se produce ningún error paracatch()
recoger, y esta es una solución temporal hasta queAbortController
se adopte por completo.fuente
Por ahora no hay una solución adecuada, como dice @spro.
Sin embargo, si tiene una respuesta en vuelo y está utilizando ReadableStream, puede cerrar la transmisión para cancelar la solicitud.
fuente
Polyfill:
¡Tenga en cuenta que el código no se prueba! Avíseme si lo ha probado y algo no funcionó. Puede darle advertencias de que intenta sobrescribir la función 'buscar' de la biblioteca oficial de JavaScript.
fuente