C’est un autre scénario qui m’a aidé à comprendre comment les opérations asynchrones fonctionnent et à implémenter mon code autour d’elles.
Alors que je suivais le cours « Nuxt 3 Fundamentals » sur Vueschool.io en mars 2023, et dans une leçon, on nous a présentés useAsyncData
. Il fournit une option pour travailler dans un mode lazy
.
Dans les docs de Nuxt, j’ai trouvé cet exemple que je n’ai pas suivi jusqu’au bout, dommage, mais qui m’a permis de comprendre le mécanisme.
L’exemple
Prenons l’exemple du projet de la formation que j’ai codé :
|
|
Je l’ai utilisé sur une page de recherche de films et à chaque fois que j’y accédais directement, cela fonctionnait, me chargeant les films et leurs informations.
Si je naviguais d’abord sur la page d’accueil, par exemple, puis sur la page de recherche, j’obtenais une page blanche…
Pourquoi ?
La solution
Le problème se situe à la dernière ligne de la méthode search
.
Si vous tracez dans la console fetchIsPending
et apiSearchResponse
, la valeur de la première variable est égale à true
et la seconde est égale à undefined
.
C’est logique puisqu’il s’agit d’un chargement lazy
des données demandées.
Quand fetchIsPending
deviendra une valeur vraie, apiSearchResponse
contiendra une instance de ApiSearchResponse
.
Comment surveiller le moment de ce changement ?
De la manière suivante :
|
|
Cependant, vous avez peut-être remarqué l’option getCachedData
utilisée sur useLazyAsyncData
.
Si vous vous arrêtez en ajoutant le watch
, que vous naviguez vers une autre page et que vous revenez sur la page de recherche, celle-ci sera vide à nouveau.
En fait, Nuxt retourne la réponse en cache, mais le code n’utilise pas cette valeur en cache.
Il faut donc ajouter une vérification :
|
|
Voilà : vous traitez à la fois la première demande et la demande mise en cache et l’utilisateur est heureux d’utiliser votre application !
Crédit : Photo par Priscilla Du Preez sur Unsplash.