中止可能なアクション
1 つのトランザクションのためのアクションのセット (クリックコールバックなど) はまとめてサーバへの送信キューに入れられます。ユーザが別のナビゲーション項目をクリックするなどして、別のトランザクションを開始した場合、すべての中止可能なアクションはキューから削除されます。中止されたアクションはサーバには送信されず、その状態は ABORTED に設定されます。
中止可能なアクションは、通常はサーバに送信されて実行されます (ただし、その後で中止可能なアクションがキューに追加されたときにサーバからまだ返されていない場合を除きます)。
一部のアクションがサーバに送信され、まだ返されていない場合、そのアクションは完了しますが、実行されるのは ABORTED 状態 (action.getState() === "ABORTED") に関連付けられたコールバックロジックのみです。これにより、コンポーネントは必要に応じてメッセージをログに記録するか、中止されたアクションがある場合はクリーンアップ処理を実行できます。
アクションを中止可能としてマーク
サーバ側アクションを中止可能とマークするには、JavaScript で Action オブジェクトに対して setAbortable() メソッドを使用します。次に例を示します。
1var action = cmp.get("c.serverEcho");
2action.setAbortable();setCallback() には、コールバックを呼び出すアクション状態を登録する 3 つ目のパラメータがあります。setCallback() に 3 つ目の引数を指定しないと、デフォルトで SUCCESS および ERROR 状態が登録されます。コールバックで中止されたアクションがあるかどうかを確認し、中止されたアクションをログに記録するなど、適切なアクションを実行するには、3 つ目の引数に ABORTED 状態を明示的に設定し、setCallback() をコールします。次に例を示します。
1// Process default action states
2action.setCallback(this, function(response) {
3 var state = response.getState();
4 if (state === "SUCCESS") {
5 // Alert the user with the value returned from the server
6 alert("From server: " + response.getReturnValue());
7 }
8 // process other action states
9});
10// Explicitly register callback for ABORTED
11action.setCallback(this,
12 function(response) {
13 alert("The action was aborted");
14 },
15 "ABORTED"
16);急速な連続クリック
ナビゲーションメニューの各アクションからサーバへの要求が遅い場合を考えてみましょう。ユーザがナビゲーション項目を立て続けに何回もクリックして、後続のクリックの前にサーバから応答が戻らなかったとします。すべてのアクションが中止可能とマークされている場合、最後のクリックを除き、コールバックは一切コールされません。これにより、複数のサーバ応答を連続して表示したために発生する画面のちらつきがなくなり、ユーザの操作性が向上します。