Cancel an Asynchronous Request in a Flow Local Action

If an asynchronous request times out, the flow executes the local action's fault connector and sets $Flow.FaultMessage to the error message. However, the original request isn't automatically canceled. To abort an asynchronous request, use the cancelToken parameter available in the invoke method.

note: By default, requests time out after 120 seconds. To override the default, assign a different Integer to the component's timeout attribute.

In this client-side controller, the invoke method returns a Promise. When the method has done all it needs to do, it completes the call and control returns to the flow.

  • If the request is successful, the method uses resolve() to execute the next element in the flow after this action.
  • If the request isn't successful, it uses reject() to execute the local action’s fault connector and sets $Flow.FaultMessage to “My error message”.
  • If the request takes too long, it uses cancelToken.promise.then to abort the request.
({
   invoke : function(component, event, helper) {
      var cancelToken = event.getParam("arguments").cancelToken;

      return new Promise(function(resolve, reject) {
         var xhttp = new XMLHttpRequest();

         // Do something, like get data from
         // a database behind your firewall
         xhttp.onreadystatechange = $A.getCallback(function() {
            if (/* request was successful */) {
               // Complete the call and return to the flow
               resolve();
            } else {
               reject(new Error("My error message"));
            }
         });

         // If the Promise times out, abort the request and
         // pass set $Flow.FaultMessage to "Request timed out"
         cancelToken.promise.then(function(error) {
            xhttp.abort();
            reject(new Error("Request timed out."));
         });

      });
   }
})

See Also