フローローカルアクションの非同期要求のキャンセル
非同期要求がタイムアウトすると、フローはローカルアクションの障害コネクタを実行し、$Flow.FaultMessage をエラーメッセージに設定します。ただし、元の要求は自動的にキャンセルされません。非同期要求を中止するには、invoke メソッドで使用可能な cancelToken パラメータを使用します。
例
このクライアント側コントローラでは、invoke メソッドが Promise を返します。メソッドが必要な操作をすべて完了したら、コールが完了し、制御がフローに戻ります。
- 要求が成功すると、メソッドは resolve() を使用して、このアクションの後にフローの次の要素を実行します。
- 要求が失敗すると、reject() を使用して、ローカルアクションの障害コネクタを実行し、$Flow.FaultMessage を「My error message」に設定します。
- 要求の処理に時間がかかりすぎると、cancelToken.promise.then を使用して要求を中止します。
1({
2 invoke : function(component, event, helper) {
3 var cancelToken = event.getParam("arguments").cancelToken;
4
5 return new Promise(function(resolve, reject) {
6 var xhttp = new XMLHttpRequest();
7
8 // Do something, like get data from
9 // a database behind your firewall
10 xhttp.onreadystatechange = $A.getCallback(function() {
11 if (/* request was successful */) {
12 // Complete the call and return to the flow
13 resolve();
14 } else {
15 reject(new Error("My error message"));
16 }
17 });
18
19 // If the Promise times out, abort the request and
20 // pass set $Flow.FaultMessage to "Request timed out"
21 cancelToken.promise.then(function(error) {
22 xhttp.abort();
23 reject(new Error("Request timed out."));
24 });
25
26 });
27 }
28})