Le gestionnaire s'exécute de façon synchrone jusqu'à ce qu'il rencontre await, puis il rend la main au navigateur et planifie le reste de la fonction comme une microtâche. Une fois la promesse attendue résolue, cette continuation part dans la file des microtâches, qui se vide entièrement après la tâche en cours et avant le prochain timer ou le prochain rendu. Donc await ne bloque jamais le thread principal ; il coupe la fonction en deux.
Pourquoi les recruteurs posent cette question
L'asynchrone, c'est là que beaucoup de développeurs ont un modèle mental flou. Le recruteur veut savoir si vous comprenez que JavaScript est monothread et coopératif plutôt que magiquement parallèle, parce que c'est cette compréhension qui vous empêche d'écrire un gestionnaire qui affame le rendu ou une boucle qui lance deux cents requêtes à la suite. Ça prédit aussi votre capacité à raisonner plus tard sur les conditions de course, l'annulation et les états périmés.
Comment structurer votre réponse
- Dites que JavaScript n'exécute qu'une pile d'appels à la fois.
- Décrivez comment await suspend la fonction et rend le thread.
- Séparez la file des microtâches de la file des tâches.
- Terminez par une conséquence pratique, par exemple un await dans une boucle.
Exemple de réponse
Bien sûr. Le gestionnaire démarre sur le thread principal comme n'importe quelle fonction, et tout ce qui précède le premier await s'exécute de façon synchrone. Au await, la fonction se suspend et renvoie une promesse à son appelant, donc le navigateur récupère le thread et peut peindre. Quand la promesse attendue se résout, le reste de la fonction est poussé dans la file des microtâches, pas dans la file des tâches. Ça compte parce que les microtâches se vident entièrement avant que le navigateur ne prenne le prochain timer ou la prochaine frame, donc une longue chaîne de résolutions de promesses peut quand même bloquer le rendu alors que rien n'est techniquement synchrone. La version concrète m'est tombée dessus sur un tableau de bord. On faisait un await dans une boucle for sur environ 300 lignes, donc chaque requête attendait la précédente et la page mettait 12 secondes à se remplir. Passer à Promise.all avec une petite limite de concurrence a fait descendre ça sous la seconde. Même code, même thread, comportement complètement différent.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Où se placent les callbacks de requestAnimationFrame par rapport aux microtâches ?
- Comment annuleriez-vous ce travail en cours si le composant est démonté ?
- Que se passe-t-il si une de ces promesses attendues échoue et que rien ne l'attrape ?
Autres questions pour Développeur full stack
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions