2016-10-27 9 views
0

私はAureliaを使用しており、私のAPIを呼び出すという約束を複数持っています。私が約束を何度も繰り返すためにボタンをクリックすると、バックエンドはタイムアウトします。どのようにして私が発射している約束を止めたり停止したりすることができますか?APIを使い過ぎてタイムアウトすることがないように最新のAPIを入手してください。Aureliaがhttpリクエストのオーバーロードを停止します

答えて

2

これはaureliaに固有のものではありませんが、これはどの非同期イベント実装でも発生します。

  1. ボタンをクリックすると、イベントハンドラが呼び出されます。
  2. イベントハンドラは、非同期AJAX要求をサーバーに送信します。非同期であるため、リクエストが発生している間は、コードとアプリケーションは引き続き実行されます。
  3. ボタンをもう一度クリックすると、要求が完了するよりも速くクリックすると仮定して、2回目のAJAX要求を同時に送信できます。
  4. これを悪化させるために、並行リクエストは順不同で完了することもあります(つまり、後のリクエストが前に完了する)。あなたのコードはそれを適切に処理するための準備が必要です。

この動作をしたくない場合は、AJAXリクエストが完了するまでユーザーが再度送信しないようにしてください。たとえば、次のようになります。

  • リクエストを送信するときにボタンを無効にします。または
  • モーダル "ローディング"画面/スピナーを表示して、要求の飛行中にアプリケーションとの相互作用を防止します。

ユーザのフィードバックを与えることは、とにかく優れたUXであることに注意してください。ネットワークの要求は、さまざまな理由で遅れる可能性があります。何か起きていることを知らせるためのフィードバックを与えることをお勧めします。

+0

フィードバックに感謝します。 Aureliaが最新のPromiseを取り消し、最新のものをクリックする方法を持っていたかどうか疑問に思っています。私は場所に何かを入れます。 – seroth

+0

"約束を取り消す"ことは一般的なことではありませんが、AJAXのリクエストは通常​​取り消し可能です。それはあなたが使用するAPIに依存しますが、それは可能です。たぶん、この質問に対する私の答えに興味があるでしょう。これは非常によく似ています(先読み制御のためのAJAXと同時に):http://stackoverflow.com/questions/40293954/async-type-ahead-input-buffer-待ち行列/ 40295337#40295337 – jods

関連する問題