Maison > interface Web > js tutoriel > Synchronisation et asynchronisme en JavaScript

Synchronisation et asynchronisme en JavaScript

黄舟
Libérer: 2017-02-07 14:38:23
original
1105 Les gens l'ont consulté

Dans le processus d'apprentissage de JavaScript, la synchronisation et l'asynchronisme sont deux concepts très gênants, surtout pour les débutants. En termes simples, lorsque deux ou plusieurs choses se produisent en même temps, cela s’appelle synchronisation ; lorsqu’elles ne se produisent pas en même temps, cela s’appelle asynchrone.

Bien que ces deux concepts semblent simples, il faut beaucoup d'efforts pour réellement les comprendre. Nous devons comprendre, à travers des opérations réelles, quelles situations sont synchrones et quelles situations sont asynchrones.

Vous pensez peut-être que les fonctions JavaScript ordinaires sont synchrones. Lorsque vous utilisez setTimeout() et AJAX, vous pouvez aussi penser qu'ils sont synchrones, n'est-ce pas ? Si je vous disais que ces deux fonctions peuvent aussi être asynchrones à certains moments, le croiriez-vous ?

Pour expliquer clairement la raison, nous avons besoin de l'aide de M. X.

Scénario 1 : Monsieur tâches assignées.

    2 Le seul moyen de le contacter est de l'appeler.
  • 3 Peu importe le problème ou la tâche que vous rencontrez, si vous souhaitez demander de l'aide à M. X, vous devez l'appeler.
  • 4 M. X vous fournira des réponses ou terminera la tâche immédiatement et vous informera une fois terminée.
  • 5 Avec l'aide de M.
  • Dans ce processus, ce que vous et M. X accomplissez, c'est une communication synchrone.
  • Quand vous posez des questions, il écoute ; quand il donne des réponses, vous écoutez en même temps.

Scénario 2 : M. X n'aime pas la synchronicité

Parce que M. X . Ainsi, lorsque vous l'appelez, la ligne est toujours occupée. Vous ne pouvez pas lui poser de questions et il ne peut pas y répondre à votre place.

Synchronisation et asynchronisme en JavaScriptAlors, comment Monsieur X peut-il gérer cette situation ?

1 Mr X engage un assistant Mr M et est équipé d'un répondeur.

    2 Le travail de Monsieur M est d'écouter les messages sur le répondeur puis de résumer les questions et de les remettre à Monsieur X.
  • 3 De cette façon, lorsque vous appelez Monsieur Monsieur X rappelle.
  • 4 Après avoir répondu aux questions posées par les autres, Monsieur X vous rappellera et vous indiquera la solution.
  • La question est donc : ce processus est-il une communication synchrone ou une communication asynchrone ?
  • On peut dire que c'est les deux. Lorsque vous laissez un message sur le répondeur, Monsieur X n'écoute pas, il s'agit donc d'une communication asynchrone.

  • Mais quand il rappelle, vous communiquez tous les deux de manière synchrone.

Vous devez maintenant comprendre la communication synchrone et asynchrone. Parlons maintenant de la synchronisation et de l'asynchronisme en JavaScript.

JavaScript – un langage de programmation asynchrone

Quand quelqu'un dit que JavaScript est un langage asynchrone, cela veut dire qu'en général, lorsque vous utilisez JavaScript, vous devez Il prend des messages, et quand vous l'appelez, vous n'entendez pas de tonalité occupée.

Les appels de fonction en JavaScript ne se produisent jamais directement, ils se font via des messages.

JavaScript utilise une file d'attente de messages, où les nouveaux messages (ou événements) entrants sont temporairement stockés. La boucle d'événements traite en permanence ces messages et les envoie à la pile d'appels, où les fonctions de message correspondantes sont empilées dans des trames pour exécution (les variables indépendantes et dépendantes de la fonction).

La pile d'appels contient le cadre de la première fonction appelée, ainsi que les cadres d'autres fonctions appelées via des appels imbriqués au-dessus de cette fonction.

Lorsqu'un message est ajouté à la file d'attente, il attendra que le cadre de message précédent dans la pile d'appels ait été traité. Une fois le message précédent traité, la boucle d'événements le supprimera de la file d'attente, puis ajoutera la trame correspondante du message actuel à la pile d'appels.

Ce message recommence à attendre, demandant à la pile d'appels d'effacer sa trame correspondante, puis d'être supprimée de la file d'attente.

Regardez le code suivant :

 function foo(){}function bar(){  foo();
}function baz(){  bar();
}
baz();
Copier après la connexion

La fonction exécutée ici est baz(), située à la dernière ligne du segment de code. Elle sera ajoutée à la file d'attente en tant que segment. message. Lorsque l'événement - Lorsque la boucle le récupère, la pile d'appels commence à empiler les trames pour baz(), bar() et foo() pendant l'exécution.

Synchronisation et asynchronisme en JavaScript

Une fois l'exécution des fonctions terminée, leurs trames seront supprimées de la pile d'appels et le message attendra toujours dans la file d'attente jusqu'à ce que baz() soit sur le la pile a été éjectée.

Synchronisation et asynchronisme en JavaScript


N'oubliez pas que les appels de fonctions en JavaScript ne se font jamais directement, mais via des messages.

Quelles sont ces méthodes asynchrones spécifiques ?

Jusqu'à présent, j'ai rencontré certaines API, telles que setTimeout() et AJAX, qui sont spécifiquement indiquées comme méthodes asynchrones. Que se passe-t-il?

Une chose très importante est de comprendre quelles choses se produisent de manière synchrone et lesquelles se produisent de manière asynchrone. À l'aide d'événements et de boucles d'événements, JavaScript peut traiter les messages de manière asynchrone, mais cela ne signifie pas que tout dans JavaScript est asynchrone.

J'ai déjà dit que le message ne quittera pas la file d'attente tant que la pile d'appels n'effacera pas la trame correspondante. Par exemple, c'est comme si vous ne sortiez pas pour regarder un film avant d'avoir obtenu la réponse - ce qui se passe à ce moment-là est synchrone : vous restez là à attendre que la tâche soit terminée et ne partez qu'après avoir vu la tâche terminée avec votre propres yeux.

Ce qui précède est la synchronisation et le contenu asynchrone de JavaScript. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal