"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Podemos cancelar por la fuerza promesas en JavaScript?

¿Podemos cancelar por la fuerza promesas en JavaScript?

Publicado el 2024-11-24
Navegar:919

 Can We Forcefully Cancel Promises in JavaScript?

Promesas: ¿Podemos realmente forzar la cancelación?

Las promesas, introducidas en ES6, han transformado nuestro enfoque hacia la programación asincrónica. Sin embargo, hay situaciones en las que es posible que necesitemos intervenir y cancelar una promesa por la fuerza, como en el caso de escenarios de búsqueda de escritura anticipada.

Entonces, ¿podemos cancelar una promesa?

En JavaScript moderno, la dura realidad es: no. Actualmente, las promesas no admiten la cancelación.

¿Qué podemos hacer en su lugar?

Dado que la cancelación directa de la promesa no es una opción, han surgido enfoques alternativos.

Utilice un token de cancelación

Un token de cancelación es un mecanismo que le permite pasar una variable cancelable a una función. Cuando se llama al token, aborta la operación y rechaza la promesa asociada. Aquí hay un ejemplo:

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;
  });
}

Con este enfoque, puede:

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

// later on:
token.cancel();

Utilice una biblioteca de terceros

Bibliotecas prometedoras, "disculpe el juego de palabras", como Bluebird, que brindan soporte para la cancelación de promesas, junto con otras funciones avanzadas.

Adoptar un patrón de última invocación

Este patrón garantiza que solo se ejecute la última invocación de una función. Emplea un enfoque de token para cancelar invocaciones 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
});

Conclusión

Si bien es decepcionante que las promesas no respalden inherentemente la cancelación, las técnicas antes mencionadas brindan soluciones alternativas viables. A medida que el lenguaje evoluciona, la verdadera cancelación de promesas puede convertirse en realidad en el futuro.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3