In this blog post, we will look at how to invoke an Apex method using Continuation.
The reason behind using Continuation is when we want to make time-consuming actions (like making a callout to an external platform etc ) we will be going with this option.
Let's look at the sample code (please check the comments in the code )!
public with sharing class ContinuationController {
//Endpoint to which we will be making the callout
private static final String LONG_RUNNING_SERVICE_URL = 'XX';
//continuation and cacheale should be true!
@AuraEnabled(continuation=true cacheable=true)
public static Object startRequest() {
//Instantiate the Continaution class
//Also, pass the timeout when instantiation
Continuation con = new Continuation(40);
//this is the callback method
con.continuationMethod='processResponse';
//Data that you want to pass to the callback method
con.state='Hello, World!';
//Create the request
HttpRequest req = new HttpRequest();
req.setMethod('GET');
req.setEndpoint(LONG_RUNNING_SERVICE_URL);
//add the request to continuation instance
//we can add upto 3 requests
con.addHttpRequest(req);
//pass the continuation instance to the framework
return con;
}
// Callback method
@AuraEnabled(cacheable=true)
public static Object processResponse(List<String> labels, Object state) {
System.debug(' 🚀 ' +state);
//labels[0] is the response of the first request
HttpResponse response = Continuation.getResponse(labels[0]);
String result = response.getBody();
System.debug(' 🚀 ' +result);
return result;
}
}
SampleContinuationClass.cls This is the Controller of the Web Component that invoke the apex method.
import { LightningElement, wire } from "lwc";
import startRequest from "@salesforce/apexContinuation/ContinuationController.startRequest";
export default class ContinuationComponent extends LightningElement {
@wire(startRequest)
records({ data, error }) {
console.log(data);
console.log(error);
}
}
continuationController.js Hope this was helpful!