2017-10-06 2 views
1

J'ai découvert un comportement étrange dans mon application AngularJS (1.6.3), que je ne peux pas expliquer.AngularJS Http Requêtes traitées de manière synchrone?

Ce que je fais

Je fais un changement de paramètre dynamique via $state.go('.', {path: 'newPath'}) et deux composants frères et soeurs réagissent à ce changement dans leur méthode $doCheck comme:

$doCheck() { 
    if(this.path !== this.$stateParams.path) { 
    this.path = this.$stateParams.path; 

    this.handleNewPath(this.path); 
    } 
} 

Les deux composants ne demande Http. Et voici mon problème.

Comportement attendu

Les demandes initiées par les composants ne touchent pas. Les deux gèrent leurs réponses totalement isolées. Ainsi, parfois le composant A reçoit sa réponse en premier, qu'il gère en premier, parfois le composant B est plus rapide.

Comportement réel

Composant A initie une demande, ce qui prend environ 550ms (450 télécharger du contenu). Tant que le contenu n'est pas entièrement téléchargé, aucune autre demande n'est exécutée.

Ma question

Pourquoi AngularJS se comportent comme cela dans ce cas ?? Je n'ai pas déterminé quelque chose comme ça avant. Normalement, de nombreuses demandes peuvent être initiées en parallèle.

Comportement étrange enter image description here

Comportement normal

enter image description here

Mise à jour

composant B comprend un Highchart. Lorsque je désactive ce graphique, de sorte que les demandes sont lancées, mais que la réponse n'est pas gérée, le blocage de la requête est parti.

+0

Cela ressemble à un problème AngularJS et n'est pas directement connecté à Highcharts. Avez-vous des problèmes avec Highcharts? –

Répondre

0

Je crois, que j'ai trouvé le problème.

La demande pour obtenir les données de Highcharts n'a pas été celui qui a si longtemps, qui a été mon erreur en train de lire la console ...

Le problème était

Les données de réponse pour les causes Highcharts Highcharts pour commencer à rendre les nouvelles données, par conséquent le navigateur rediffuse la mise en page, qui est un processus synchrone. Chaque requête qui peut arriver "while" est mise en attente après le processus de rendu et la console (peut-être défectueuse) affiche une durée de téléchargement de 450ms, ce qui est le temps réel, le navigateur nécessaire pour afficher les graphiques. Donc, je suis désolé pour les informations trompeuses fournies, mais je ne savais pas vraiment d'où vient l'erreur en première place.