[Résolu] Utilisation de fonctions qui retournent des futures dans une route

Hello,

Actuellement j’ai une route getActivities dont le but est de récupérer les données d’un utilisateur sur Strava avant de les renvoyer à l’utilisateur.

Aucun problème pour récupérer les activités de l’utilisateur sur Strava.

Par contre, je suis occupé d’essayer de mettre en place le refresh du token de Strava si besoin.
En mettant tout le code dans ma route, j’arrive à avoir un résultat qui fonctionne, mais je ne veux pas tout mettre au même endroit parce que je vais utiliser la gestion du refresh du token de Strava dans plusieurs routes.

Au final, j’aimerai avoir ma route qui fait un truc du genre:

  • J’appelle une fonction refreshStravaTokenIfNeeded qui s’occupe de mettre à jour les tokens si besoin
  • Ensuite, une fois la méthode précédente terminée, j’appelle ma deuxième fonction getStravaUserActivities qui récupère toutes les activités de l’utilisateur

Comme les deux méthodes sont asynchrones, j’ai essayé d’utiliser les EventLoopFuture, mais je me heurte à quelques murs.

Ma fonction qui s’occupe de refresh le token Strava si besoin:

func refreshStravaTokenIfNeeded(for request: Request) throws -> EventLoopFuture<Void> {
    // Le code qui s'occupe du refresh
}

Ma fonction qui s’occupe de récupérer les activités de l’utilisateur:

private func getStravaActivities(request: Request) throws -> EventLoopFuture<[Activity]> {
   // Le code qui s'occupe d'appeler l'API de Strava et de me retourner les activités de l'utilisateur
}

Ma route:

private func getActivities(request: Request) throws -> EventLoopFuture<[Activity]> {

}

Indépendamment, les deux fonctions getStravaActivities et refreshStravaTokenIfNeeded fonctionnent bien, mais impossible de les faire fonctionner ensemble.

J’ai essayer quelque chose comme:

private func getActivities(request: Request) throws -> EventLoopFuture<[Activity]> {
    return try refreshStravaTokenIfNeeded(for: request).flatMapThrowing { _ in
        return try getStravaActivities(request: request)
    }
}

mais j’ai cette erreur:

Je me demande si le type de retour de mes fonctions (EventLoopFuture<>) est correct, ou si je dois utiliser autre chose.

Si vous avez une idée, je suis preneur…

Merci,
Bonne journée,

Alexandre

Pour ceux ou celles que ça intéresse, j’ai pu m’en tirer avec cette solution: EventLoopPromise Structure Reference :ok_hand:

Bonne journée,

Alexandre

2 J'aime