2014-06-27 5 views
3

Je récemment this question et compris la solution directe (cet être, j'ai pu annuler une promesse/demande lorsque la route a changé). Cependant, je rencontre un autre problème connexe qui, je pense, appartient à une question distincte, alors voici:AngularJS avorté promesses retarder encore d'autres promesses

Je suis en mesure d'annuler ma promesse lorsque l'itinéraire change très bien (comme vous pouvez le voir à la question I lié). Cependant, pour une raison étrange, toutes les autres demandes sur l'autre route sont retardées lors de la résolution. Voir la capture d'écran de mes outils de développement ci-dessous.

Voici le scénario: Je charge l'itinéraire A, qui appelle /api/categories et vous pouvez voir qu'il prend 30ms ce qui est normal. Ensuite, je navigue vers la route B, puis avant le chargement, je retourne à la route A. Lorsque je reviens, l'appel à /api/categorySites/1 est annulé, et vous pouvez voir quand cela se produit lorsque la barre grise se termine. Ceci est fait en avortant la promesse. Toutefois, de nouveau sur la route A, l'appel à /api/categories ne se résout pas jusqu'à ce que ce point gris réapparaisse sur la demande qui a été annulée. Ce deuxième appel à /api/categories ne devrait pas prendre 2,23s, il devrait être plus proche de 30ms.

Dev tools

Qu'est-ce qui se passe ici? Je pense que la deuxième demande de Route A serait aussi rapide qu'avant. Je dois que ça marche plus vite. Mon code est au this question. Faites-moi savoir si vous pensez que je devrais l'inclure à nouveau ici. Il m'est difficile d'imaginer que ce n'est pas un problème commun aussi ...

+0

Hmmm ... vous avez jamais comprendre cela? Je cours dans le même. – Brian

+0

Je ne pouvais pas trouver un moyen. Vous penseriez que c'était un problème plus commun. Ce que j'ai fait à la place a été d'améliorer ma vitesse de traitement back-end en utilisant la mise en cache afin que le script ne soit pas si long, il était moins visible pour l'utilisateur frontal. Bien sûr, ce n'est pas idéal et n'a pas vraiment résolu le problème. Si vous trouvez une réponse, s'il vous plaît faites le moi savoir! – Joao

+3

Lorsque vous essayez de faire une demande de changement de route # 6 n'annule pas la demande mais annule la promesse. Après avoir changé de route, vous faites la demande # 7 qui appelle le serveur et je suppose qu'il ne peut servir qu'une seule requête simultanément, donc vous voyez cet espace. Qu'y a-t-il dans le backend? – kuzzmi

Répondre

1

Ceci est un post plus ancien mais j'ai regardé dans ceci et ceci ressemble à la transition d'asynch impatient contre paresseux que j'ai lu dans la documentation d'Emberjs récemment . Sur vos routes (et les abandons subséquents) remplit la promesse (complète), se déplace vers votre demande de réacheminement.

Je crois que cela peut être amélioré avec un contrôleur d'état.

There is an Angularjs ui-router state controller that might be of use.

Here are example examples.

Angularjs routing documentation (for posterity).

Donc, c'est à peu près $routeProvider (AngularJS par défaut) renforcée par $stateProvider (ui-routeur) pour accélérer les routes avortés.

Espérons que cela est utile (environ 312 jours plus tard).