ユーザーが入力したテキストで検索してサジェストしたい
1文字ずつ入力するたびにリクエストを送ってしまうとサーバーに負荷がかかってしまうし、入力した結果が遅れて表示される問題がある
そこで、リクエスト中に入力があった場合は、前回のリクエストを中断したい
調べるとこれはAbortController
を使うと実現できることがわかった
使い方は以下
var controller = new AbortController(); var signal = controller.signal; ... fetch(url, {signal}).then(function(response) { ... }).catch(function(e) { reports.textContent = 'Download error: ' + e.message; }) ...
まずはAbortController
をインスタンス化して、そこからsignal
プロパティを受け取る
そして、それをfetch
のオプションに渡すと準備が完了する
最後に何かのイベント発生時に、インスタンス化したコントローラーのabort()
を呼び出すことでキャンセルすることができる
controller.abort();
一度キャンセルしたsignal
に紐づくfetch
は再実行できないのでインスタンス生成をしなおす必要がある
他参考
https://www.mitsue.co.jp/knowledge/blog/frontend/202012/14_0900.html