リクエストをキャンセルする新しい方法-AbortController
# フロントエンドフロントエンドでは、主に2つの方法でリクエストを送信できます:XHR と Fetch です。XHR は、うーん、かなり昔から存在する API です。しかし、設定が面倒なため、しばしばより高レベルな API にラッピングされて使用されます。例えば、jQuery の getJSON、axios、RxJS の AjaxObservable などです。
最近では、Promise が徐々に普及してきたことで、Fetch API はこれらの問題を大幅に改善することができました。返り値が Promise で、操作が便利なだけでなく、API も非常にシンプルです。
とはいえ、依然として致命的な欠点があります。Fetch はリクエストをキャンセルできません。setTimeout を使って返り値を無視することはできますが、リクエストは依然として待機し続けます。XHR では XMLHttpRequest.abort を使ってキャンセルできますが、Fetch には同様の API がありません。
しかし、最近!ついに新たな救世主、AbortController が登場しました。
AbortControllerインターフェイスの abort() メソッドは、DOM リクエスト(例:Fetch リクエスト)が完了する前に中止します。これにより、fetch リクエストや、応答のBodyの消費、ストリームを中止することができます。
使い方は非常に簡単です。
const abortController = new AbortController()
const signal = abortController.signal
そして、signal を fetch に渡すだけです。
fetch("/long-running", { signal: signal })
abortController.abort を呼び出すと、signal が fetch に送信されます。もし signal を受け取ったときにリクエストがまだ完了していなければ、そのリクエストはキャンセルされます。
fetch("/long-running", { signal: signal })
setTimeout(() => abortController.abort(), 5000)
5 秒以内にリクエストが完了しなければ、キャンセルされます。
RxJS でラッピングすれば、API がさらに便利に使えるかもしれません。しかし、現時点でのブラウザのサポート状況はあまり良くありません。
関連記事
- 超リンクの下線をもっときれいに見せる:text-underline-offsetデフォルトでは下線が文字にかなり近く、こういう見た目を好まないデザイナーもいる。僕自身も、あまりきれいだとは思っていない。
- なぜウェブは Pixel Perfect を追求すべきではないのかPixel Perfect が本当に重要なときだけそれを気にすべきであり、そうでなければ往々にして双方にとって損な結果になる。
- CSS の HSL で色を書こう!(そしてより良い方法)Web開発において、従来の HEX や RGB の色表現は広く使われているものの、読みやすさや直感性に欠ける問題があり、P3 のような広色域では表現力にも限界がある。HSL(色相、彩度、明度)は、より直感的に色を定義できる方法であり、開発者が色を理解し調整しやすくしてくれる。HSL は色相・彩度・明度の3つの軸で色を表すため、特にデザインシステムにおいて、カラーパレットの明度変化をより自然に扱える。
- line-heightを1およびellipsisを設定しないようにしたい本文では、なぜウェブデザインにおいて line-height を 1 に設定することが推奨されないのか、また ellipsis を使用する際に直面する言語の問題について探ります。