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.FaultMessageto “My error message”. - If the request takes too long, it uses
cancelToken.promise.thento 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