0

次のようなしきい値を下回っている場合、データベースの値を増やすリンクがあります。

if (currentValue + 10 < maxValue)
{
$http({method: 'GET', url: 'api.increaseValue/10'}) ...
}

ただし、すばやくクリックすると、すべてのクリックに対して if 条件が渡され、値がしきい値を超える可能性のある一連のリクエストが同時に起動されます。これをエレガントに処理する方法はありますか?

4

2 に答える 2

3

この問題を処理するには、いくつかの方法があります。@praneetloke が既に述べたことに加えて、さらにいくつかのアイデアがあります。

  • クリックハンドラー/関数は、最初にボタンを無効にし、http リクエストを送信し、サーバーから確認を受け取ったときにボタンを再度有効にすることができます。その時点で currentValue も更新されると思います。
  • currentValue をローカルで更新し、未処理のサーバー リクエストを追跡してから、http コールバックでエラー条件を処理します。たとえば、サーバー側で更新されなかった場合は、エラー ダイアログをポップアップ表示し、currentValue を適切に (つまり、未処理のサーバー リクエストの数だけ) 減らします。
于 2013-01-23T22:45:46.000 に答える
0

関数の実行を遅らせるにはsetTimeout () を使用します。また、その関数が前回のクリックで現在実行されている場合に、その関数の実行を返す関数でグローバル フラグを使用します。次に、API 呼び出しが戻ったら、フラグをリセットして、その後のクリックで関数を呼び出せるようにします。

この提案は、インクリメントされる値が何を表しているかによっても異なります。ユーザーが高速クリックを無視しても大丈夫かどうかを判断する必要があります。彼らが意図的にそれを行っており、それを許可したくない場合は、おそらく、以前の要求が処理されており、再度クリックする前に待機する必要があることを示すフレンドリーなメッセージを表示する必要があります.

このアクションのコンテキストを提供し、この関数が他に何をしているかのコードをさらに表示すると、答えが改善される可能性があります。

于 2013-01-23T22:20:24.273 に答える