Je travaille actuellement avec l'API Zendesk et la création d'utilisateurs. J'utilise le cadre CompletableFuture pour effectuer l'opération de création des utilisateurs, puis ajouter un rappel pour gérer le résultat. Toutefois, le résultat de la méthode createUsers() est un objet JobStatus qui peut avoir le statut "en attente", "terminé", "en cours de fonctionnement". Ce que je voudrais, c'est que le rappel ne soit exécuté que lorsque le statut est "terminé". Est-ce possible? Si le statut est "mis en file d'attente", je souhaite qu'il continue d'attendre jusqu'à ce que le résultat soit "terminé".Exécuter uniquement le rappel CompletableFuture lorsque l'état du résultat est terminé
Pour cet exemple, supposons que la liste contient un ensemble d'utilisateurs à créer.
public void createEndUsers(Zendesk zd, List<User> usersToBeCreated){
final static CompletableFuture<JobStatus<User>> promise = new CompletableFuture<>();
promise.supplyAsync(() -> {
JobStatus<User> js = zd.createUsers(usersToBeCreated);
return js;
}).thenAccept(Testing::updateDB);
}
public void updateDB(JobStatus<User> resultObject){
//perform various operations on the JobStatus object
}
Comment l'auriez-vous fait si vous n'aviez pas CompletableFuture? Il n'y a pas de magie ici, vous devrez interroger JobStatus pour son état ou createUsers devrait être réécrit pour ne pas retourner un objet intermédiaire. – john16384
createUsers ne peut pas être réécrit car il fait partie de l'API Zendesk et je ne veux pas me mêler de cela. Pour le reste, je pourrais simplement faire une boucle qui vérifie l'API Zendesk et met à jour l'état de l'objet JobStatus et continue à le faire jusqu'à ce que le statut soit "terminé", mais j'espérais qu'il y avait une façon plus élégante de faire un rappel sur certaines conditions. – Kristianasp
Il y a un appel d'API qui crée un seul utilisateur. Il semble revenir seulement lorsque le travail est terminé. Il semble que vous pourriez simplement appeler plusieurs d'entre eux en parallèle jusqu'à ce que vous les ayez tous créés. –