中止可能なアクション
中止可能なアクションは、サーバに送信された後サーバからアクション応答が返されるまでにそのアクションを作成したコンポーネントが無効にならなければ、通常どおり実行されます。
中止不能のアクションは常にサーバに送信され、キュー内で中止することはできません。ただし、サーバからアクション応答が返され、この時点で関連付けられているコンポーネントが無効な場合は、アクションの状態が 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);急速な連続クリック
ナビゲーションメニューの各アクションからサーバへの要求が遅い場合を考えてみましょう。ユーザがナビゲーション項目を立て続けに何回もクリックして、後続のクリックの前にサーバから応答が戻らなかったとします。すべてのアクションが中止可能とマークされている場合、最後のクリックを除き、コールバックは一切コールされません。これにより、複数のサーバ応答を連続して表示したために発生する画面のちらつきがなくなり、ユーザの操作性が向上します。