Как прервать запрос на выборку?

Я использовал новый API извлечения вместо старого XMLHttpRequest

Это здорово, но мне не хватает одной важной функции, xhr.abort().

Я не могу найти информацию об этой функции для извлечения.

Спасибо.

UPDATE: hacky обходной путь для прерывания выборки https://github.com/Morantron/poor-mans-cancelable-fetch

В основном вы запускаете выборку в веб-рабочем столе и отмените веб-исполнителя, чтобы прервать выборку

Ответ 1

По-прежнему остается открытым вопрос Все соответствующие обсуждения можно найти здесь.

https://github.com/whatwg/fetch/issues/447 : (

Ответ 2

Можно прервать выборку через AbortController:

export function cancelableFetch(reqInfo, reqInit) {
  var abortController = new AbortController();
  var signal = abortController.signal;
  var cancel = abortController.abort.bind(abortController);

  var wrapResult = function (result) {
    if (result instanceof Promise) {
      var promise = result;
      promise.then = function (onfulfilled, onrejected) {
        var nativeThenResult = Object.getPrototypeOf(this).then.call(this, onfulfilled, onrejected);
        return wrapResult(nativeThenResult);
      }
      promise.cancel = cancel;
    }
    return result;
  }

  var req = window.fetch(reqInfo, Object.assign({signal: signal}, reqInit));
  return wrapResult(req);
}

Пример использования:

var req = cancelableFetch("/api/config")
  .then(res => res.json())
  .catch(err => {
    if (err.code === DOMException.ABORT_ERR) {
      console.log('Request canceled.')
    }
    else {
      // handle error
    }
  });

setTimeout(() => req.cancel(), 2000);

Ссылки:

  1. https://developers.google.com/web/updates/2017/09/abortable-fetch
  2. https://developer.mozilla.org/en-US/docs/Web/API/AbortController