デバウンスされた入力と応答の処理に関するバグを発見しました。
入力時にサーバーにクエリを実行する検索入力があります。300msに設定されたデバウンスを適用しました。ただし、次のような奇妙な動作が発生することがあります。
ユーザーは「ab」と入力し、300 ミリ秒待機し、最初の要求が解決される前に「c」と入力します。検索バーには「abc」と表示されますが、現在 2 つのネットワーク リクエストがあります。場合によっては、2 番目の要求 (「abc」) が最初に解決され、次に最初の要求 (「ab」) が解決され、結果リストが上書きされることがあります。したがって、ユーザーには「ab」の結果のリストが表示されますが、検索入力には「abc」が含まれています。
これは、デバウンス自体の問題ではなく、解決時に無視できるように「古い」プロミスを破棄する方法を見つける方法に沿っているようです。
たとえば、私が欲しいもの
- 種類
"ab"
- 送信リクエスト「ab」
- 種類
"c"
- 送信リクエスト「abc」
- "abc" は応答を返し、Promise の解決を処理します
- 「ab」は応答を返し、promise を無視します
Angular でこのようなことを行うための一般的なパターン/アプローチはありますか? よくある話題になりそうです。
例: 「作成された最新のプロミスのみを解決する」?