J'ai rencontré une question d'entretien aujourd'hui, c'est-à-dire que s'il y a deux opérations ajax asynchrones sur la page, parce que je ne suis pas sûr de l'ordre d'exécution de ces deux opérations asynchrones, comment puis-je exécuter une nouvelle opération une fois les deux opérations exécutées ? Meilleure Quelle est la méthode ?
J'ai répondu à la première méthode à ce moment-là : imbriquer deux ajax et effectuer de nouvelles opérations dans la fonction de retour du deuxième ajax. Réponse de l'intervieweur : Cette méthode est trop boiteuse.
J'ai donc réfléchi à la deuxième réponse : surveiller les variables locales via le timer setTimeout et m'assurer que les deux opérations asynchrones sont terminées avant d'effectuer une nouvelle opération. Réponse de l'enquêteur : Les performances de cette méthode ne sont pas bonnes. Pouvez-vous penser à une méthode simple et plus raisonnable ?
Je n'y avais pas pensé à l'époque
Alors j'ai posé cette question pour savoir quelle est la meilleure solution ? Bienvenue pour discuter et donner des conseils
1. La promesse enveloppe les opérations ajax asynchrones,
2. Définir la fonction asynchrone,
3. Utilisez wait pour attendre la fin de l'acquisition asynchrone des données promises. Cette méthode est simple et efficace. ci-dessous. Je suis trop paresseux pour l'utiliser. Une fois qu'ajax a obtenu les données, utilisez la fonction settimeout pour simuler l'obtention de données. Cette fonction est asynchrone et a le même principe et le même effet.
http://api.jquery.com/jQuery....
La méthode native prête à l'emploi actuelle dans l'environnement du navigateur est Promise.all.
Prenons l'exemple de l'appel de ma bibliothèque de cartes Sinomap Demo Pour charger une carte sur cette page, plusieurs demandes doivent être lancées en même temps mais l'ordre de retour ne peut pas être garanti :
Données de terrain en Chine
Données JSON de chaque province
Lorsque plusieurs graphiques sont superposés, plusieurs données JSON dans plusieurs graphiques doivent être renvoyées via différentes interfaces de données...
La solution est directement dans le déballé
http://sinomap.ewind.us/demo/demo.js
, exemple :De cette façon, Promise réalise non seulement le découplage de la logique de rappel, mais réalise également un contrôle de processus asynchrone de base.
Je viens de voir la méthode when de jquery, alors j'en ai réécrit une pour vous. Ce n'est peut-être pas aussi bon que jquery, mais au moins cela peut obtenir l'effet. Vous pouvez directement entrer le code suivant dans la console pour essayer. aller écrire. Cela m'a pris une demi-heure. .
Demandez si je peux utiliser jQ. Si oui, dites simplement :
Au fait, voici la référence de la documentation de $.when
Je pense que c'est la méthode de Promise, tout ou quelque chose comme ça
Votre question est la suivante : il y a trois choses a, b, c. c doit être exécuté une fois a et b terminés.
Il existe de nombreuses méthodes : comme la méthode de nidification que vous avez évoquée, et la méthode de surveillance violente
J'ai déjà réfléchi à cette question et voici ma réponse.
Émetteur asynchrone
Comment effectuer des opérations asynchrones à l'aide du stockage sur baie
Notez que les fonctions à l'intérieur ont toutes un paramètre commit , qui est une fonction utilisée pour renvoyer une valeur. Lorsque ajax réussit, transmettez simplement la valeur de retour
Écrire un lanceur
Les processeurs sont des données comme des tâches. cb est le rappel final.
Concurrent eux
Exécuter un émetteur asynchrone et fournir
最终回调
Lien
https://eczn.coding.me/blog/%...
Vous pouvez définir une variable a=0 et définir a++ dans le rappel une fois la requête ajax réussie
;Ensuite, jugez a==2 dans les deux rappels et exécutez la fonction d'opération
Définissez deux indicateurs, puis deux ajax appellent le même rappel. Dans ce rappel, il est jugé que les deux indicateurs sont vrais avant que les opérations suivantes ne soient effectuées.
Écrivez ajax dans un autre ajax et exécutez-le dans le rappel