DOM

インターフェイス

AbortController インターフェイス

  編集:2022.04.03 by T.A.

MS

このインターフェースは一つ以上のリクエストをいつでも中断することを可能にするコントローラー オブジェクトを表します。

AbortController.AbortController() コンストラクターを使うことで AbortController オブジェクトを新しく作ることができます。DOM リクエストとの送信は、AbortSignal オブジェクトを使って行われます。

コンストラクター
AbortController()
新しい AbortController オブジェクトインスタンスを生成します。
プロパティ
AbortController.signal 読取専用
AbortSignal オブジェクトのインスタンスを返します。このオブジェクトは、DOM リクエストの送信や中断に使用します。
メソッド
AbortController.abort()
DOM リクエストが完了する前に中断します。これは、fetch リクエスト、あらゆるレスポンス ボディの消費、およびストリームを中断できます。

この後の短いコードで、Fetch API を使用してビデオをダウンロードします。

まず AbortController() コンストラクターを使ってコントローラーを生成し、AbortController.signal プロパティを使用して関連する AbortSignal オブジェクトへの参照を取得します。

読み込みリクエスト が初期化すると、リクエストのオプションオブジェクト(下記 {signal} を参照)の内部のオプションとして AbortSignal を渡します。これによりシグナルと読み込みリクエストのコントローラーは関連付き、AbortController.abort() を呼び出すことで下記の 2 つ目のイベントリスナーに見られるように中断が許可されます。

var controller = new AbortController();
var signal = controller.signal;

var downloadBtn = document.querySelector('.download');
var abortBtn = document.querySelector('.abort');

downloadBtn.addEventListener('click', fetchVideo);

abortBtn.addEventListener('click', function() {
  controller.abort();
  console.log('Download aborted');
});

function fetchVideo() {
  ...
  fetch(url, {signal}).then(function(response) {
    ...
  }).catch(function(e) {
   reports.textContent = 'Download error: ' + e.message;
  })
}

Note: abort() が呼ばれると、fetch() promise は AbortError と呼ばれる DOMException で失敗します。

GitHub で完全に動作する例を見ることができます ― abort-api(または、実際に動作する様子)を参照してください。


テスト
HTML:

ここに表示
スクリプト組み込み:



スクリプト:


スクリプト:



表示内容:
表示内容: