Vapor - je continue de découvrir

Bonjour à tous,

Je pense avoir compris le concept du EventLoopFuture et l’interêt de ne pas bloquer le port d’écoute.
Et du coup, l’intérêt également de faire des queries avec au choix, .map , .flatmap, .tranform.
Mais, je pensais aussi que l’on pouvait si j’en fais le choix, faire une query et attendre le résultat pour continuer, et ce hors map et compagnie. à moi de savoir si c’est stupide ou pas.
Mais en observant les logs, je vois que même avec une query sans .map et .flatmap ou .transform, je me retrouve avec un NIO.EventLoopFuture
Je comprendrais si je faisais un find qui lui renvoie un NIO… , mais à priori si on déclenche une query ce n’est pas le cas.

mon exemple :

        let titi = maClass.query(on: req.db)
        .filter(\.$maColonne == monFiltre)
        .count()

dans le contenu de titi, je récupère NIO.EventLoopFuture<Swift.Int>
Je comprendrais si j’avais ajouté un .map , ou si je fais un find. Mais là je ne vois pas pourquoi.
Et j’aimerais bien comprendre à quoi c’est du :slight_smile:

Si vous savez pourquoi, merci pour votre retour :wink:

Salut,
Je pense que c’est simplement du au fait que dès que tu fait un appelle a la base de données tu travail de manière asynchrone et donc que tu lance un requête et que tu reçois un future pour que le reste de ton code puisse continué à s’exécuter. A partir du moment ou tu te connecte à un endroit distant (même si tu travail sur une bdd local ca reste une connexion et un connexion qui peut échoué) cela peut prendre un certain temps et ça doit être géré de façon asynchrone.

Je suis pas certain de ma réponse mais je pense que c’est pour ca.

@nicopicks Effectivement, Vapor est performant grâce à ça. Toutes les requêtes sont faites de manière asynchrone pour ne pas bloquer d’autres requêtes moins longues (comme une simple demande d’heure).

Donc @sylvain, il faut que tu te dises que tout est asynchrone et que si tu veux attendre ou la rendre synchrone, c’est à toi de le préciser avec .wait

Je te mets le lien de la doc sur les Async :

https://docs.vapor.codes/4.0/async/

Et un autre lien pour comprendre le fonctionnement de Map, FlatMap :

Merci à tous les deux. Mon soucis n’était pas de comprendre l’idée de requêtes asynchrone, map, flatmap et cie. C’est que lorsque j’ai fouillé un peu le code j’avais l’impression que query ne l’était pas.
Mais je me trompe, par défaut cela est asynchrone.

Encore merci de votre participation.