"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Podemos cancelar à força promessas em JavaScript?

Podemos cancelar à força promessas em JavaScript?

Publicado em 2024-11-24
Navegar:472

 Can We Forcefully Cancel Promises in JavaScript?

Promessas: podemos realmente forçar o cancelamento?

As promessas, introduzidas no ES6, transformaram nossa abordagem à programação assíncrona. No entanto, há situações em que podemos precisar intervir e cancelar à força uma promessa, como no caso de cenários de pesquisa com digitação antecipada.

Então, podemos cancelar uma promessa?

Em JavaScript moderno, a dura realidade é: não. Atualmente, as promessas não suportam cancelamento.

O que podemos fazer em vez disso?

Como o cancelamento direto da promessa não é uma opção, surgiram abordagens alternativas.

Use um token de cancelamento

Um token de cancelamento é um mecanismo que permite passar uma variável cancelável para uma função. Quando o token é chamado, ele aborta a operação e rejeita a promessa associada. Aqui está um exemplo:

function getWithCancel(url) { // token for cancellation
  var xhr = new XMLHttpRequest();
  xhr.open("GET", url);
  return new Promise(function(resolve, reject) {
    xhr.onload = function() { resolve(xhr.responseText); };
    token.cancel = function() {
      xhr.abort();
      reject(new Error("Cancelled"));
    };
    xhr.onerror = reject;
  });
}

Com esta abordagem, você pode:

var token = {};
var promise = getWithCancel("/someUrl", token);

// later on:
token.cancel();

Use uma biblioteca de terceiros

Bibliotecas promissoras, "desculpe o trocadilho", como o Bluebird fornecem suporte para cancelamento de promessas, junto com outros recursos avançados.

Adote um padrão de última chamada

Esse padrão garante que apenas a última invocação de uma função seja executada. Ele emprega uma abordagem de token para cancelar invocações anteriores:

function last(fn) {
  var lastToken = { cancel: function(){} };
  return function() {
    lastToken.cancel();
    var args = Array.prototype.slice.call(arguments);
    args.push(lastToken);
    return fn.apply(this, args);
  };
}

Uso:

var synced = last(getWithCancel);
synced("/url1?q=a"); // canceled
synced("/url1?q=ab"); // canceled
synced("/url1?q=abc"); // canceled
synced("/url1?q=abcd").then(function() {
  // only this will run
});

Conclusão

Embora seja decepcionante que as promessas não suportem inerentemente o cancelamento, as técnicas mencionadas acima fornecem soluções alternativas viáveis. À medida que a linguagem evolui, o verdadeiro cancelamento da promessa pode se tornar uma realidade no futuro.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3