Há uma nova API para fazer solicitações do JavaScript: fetch (). Existe algum mecanismo interno para cancelar essas solicitações durante o voo?
javascript
ajax
fetch-api
Sam Lee
fonte
fonte
Respostas:
TL / DR:
fetch
agora suporta umsignal
parâmetro a partir de 20 de setembro de 2017, mas nem todos os navegadores parecem suportar isso no momento .ATUALIZAÇÃO 2020: A maioria dos principais navegadores (Edge, Firefox, Chrome, Safari, Opera e alguns outros) suportam o recurso , que se tornou parte do padrão de vida do DOM . (a partir de 5 de março de 2020)
Essa é uma mudança que veremos em breve, portanto, você poderá cancelar uma solicitação usando um
AbortController
sAbortSignal
.Versão longa
Como:
O modo como funciona é o seguinte:
Etapa 1 : você cria um
AbortController
(por enquanto eu apenas usei isso )const controller = new AbortController()
Etapa 2 : você recebe o
AbortController
sinal s assim:const signal = controller.signal
Etapa 3 : você passa a
signal
buscar assim:Etapa 4 : basta abortar sempre que precisar:
controller.abort();
Aqui está um exemplo de como isso funcionaria (funciona no Firefox 57+):
Fontes:
fonte
AbortController is not defined
. De qualquer forma esta é apenas uma prova de conceito, pelo menos as pessoas com Firefox 57+ pode vê-lo trabalhandohttps://developers.google.com/web/updates/2017/09/abortable-fetch
https://dom.spec.whatwg.org/#aborting-ongoing-activities
funciona na borda 16 (2017-10-17), firefox 57 (2017-11-14), safari de desktop 11.1 (2018-03-29), ios safari 11.4 (2018-03-29), chrome 67 (2018-05 -29) e mais tarde.
em navegadores mais antigos, você pode usar o polyfill whatwg-fetch do github e o polyfill AbortController . você pode detectar navegadores mais antigos e usar os polyfills condicionalmente também:
fonte
A partir de fevereiro de 2018,
fetch()
pode ser cancelado com o código abaixo no Chrome (leia Usando fluxos legíveis para ativar o suporte ao Firefox). Nenhum erro é gerado paracatch()
ser atendido, e esta é uma solução temporária até queAbortController
seja totalmente adotada.fonte
Por enquanto, não há solução adequada, como diz o @spro.
No entanto, se você tiver uma resposta a bordo e estiver usando o ReadableStream, poderá fechar o fluxo para cancelar a solicitação.
fonte
Vamos polyfill:
Por favor, tenha em mente que o código não foi testado! Deixe-me saber se você o testou e algo não funcionou. Pode avisar que você tenta sobrescrever a função 'buscar' da biblioteca oficial do JavaScript.
fonte