recherche
Maisoninterface Webjs tutorielAPI asynchrones utilisant l'API Fetch et les générateurs ES6

Asynchronous APIs Using the Fetch API and ES6 Generators

Points de base

  • ECMAScript 6 (ES6) prend mieux en charge la programmation asynchrone via la promesse et le générateur, et a introduit l'API Fetch, conçue pour remplacer XMLHTTPRequest comme base pour communiquer avec les ressources distantes.
  • La méthode de l'API
  • Fetch renvoie des objets ES6 Promise qui peuvent être utilisés avec le générateur pour former la base d'opérations asynchrones complexes, telles qu'une série d'opérations, où chaque opération dépend de la valeur renvoyée par l'opération précédente.
  • Le générateur peut être utilisé avec l'API Fetch pour effectuer des tâches telles que le sondage long, où le client envoie constamment des demandes au serveur jusqu'à ce qu'il obtienne une réponse. Cela se fait en produisant une réponse avant qu'il ne contienne des données.
  • API Fetch et le générateur ES6 peut également être utilisé pour implémenter plusieurs dépendances des appels asynchrones, où chaque opération suivante dépend de la valeur renvoyée par l'opération précédente. Cela peut être fait en les mettant dans une fonction de générateur et en l'exécutant si nécessaire.

ECMAScript 6 (AKA ECMAScript 2015 ou ES6) apporte de nombreuses nouvelles fonctionnalités à JavaScript, ce qui le rend idéal pour les grandes applications. Une fonctionnalité est qu'il prend mieux en charge la programmation asynchrone à l'aide de promesse et de générateur. Un autre est l'ajout de l'API Fetch, conçu pour remplacer XMLHTTPRequest comme base pour communiquer avec les ressources distantes.

La méthode API Fetch renvoie des objets promesses ES6 qui peuvent être utilisés en conjonction avec le générateur pour former la base des opérations asynchrones complexes. Cela peut être quelque chose d'une série d'opérations asynchrones (chacune dépend de la valeur renvoyée par l'opération précédente) à une opération qui doit être publiée à plusieurs reprises aux appels asynchrones vers le serveur pour obtenir la dernière mise à jour.

Dans cet article, nous apprendrons à utiliser l'API Fetch avec un générateur pour construire une API asynchrone. L'API Fetch est actuellement prise en charge par Chrome, Opera, Firefox et Android Browsers. Pour les navigateurs non pris en charge, nous fournissons un polyfill de GitHub.

Comme d'habitude, le code de cet article peut être trouvé dans notre référentiel GitHub, avec une démonstration de la technique finale au bas de l'article.

Utilisez le générateur pour le fonctionnement asynchrone

CONSEIL: Si vous devez consulter le contenu du générateur et son fonctionnement, veuillez consulter: ECMAScript 2015: Générateur et iterator

Alors, comment effectuer des opérations asynchrones à l'aide du générateur? Eh bien, si nous analysons le fonctionnement du générateur, nous trouverons la réponse.

La fonction du générateur qui implémente l'itérateur a la structure suivante:

function *myIterator(){
  while(condition){
    //计算要返回的下一个值
    yield value;
  }
}

yield Le mot-clé est responsable du renvoi du résultat et de la pause de l'exécution de la fonction Iterator jusqu'à la prochaine fois qu'elle sera appelée. Il préserve également l'état de la fonction au lieu de relancer tout la prochaine fois qu'il s'appelle, se souvenant efficacement de sa dernière gauche.

Nous pouvons reconstituer la fonction ci-dessus comme une forme sans boucle while:

function *myIterator(){
  while(condition){
    //计算要返回的下一个值
    yield value;
  }
}

Dans les deux cas ci-dessus, la fonction se comporte de la même manière. La seule raison d'utiliser le mot-clé yield est de suspendre l'exécution de la fonction jusqu'à la prochaine itération (qui semble un peu asynchrone). Étant donné que l'instruction yield peut renvoyer n'importe quelle valeur, nous pouvons également renvoyer une promesse et faire en sorte que la fonction exécute plusieurs appels asynchrones.

Utilisez un générateur avec API Fetch

CONSEIL: Pour examen de l'API Fetch, veuillez consulter: Introduction à API Fetch

Comme mentionné précédemment, l'API Fetch est conçu pour remplacer XMLHTTPREQUEST. Cette nouvelle API fournit un contrôle sur les différentes parties des demandes HTTP et renvoie une promesse qui est analysée ou rejetée en fonction de la réponse du serveur.

Bondage long

L'un des cas d'utilisation où l'API et le générateur Fetch peuvent être utilisés ensemble est un sondage long. Le sondage long est une technique dans laquelle un client envoie constamment des demandes au serveur jusqu'à ce qu'une réponse soit obtenue. Dans ce cas, vous pouvez utiliser un générateur pour produire en continu la réponse jusqu'à ce que la réponse contient des données.

Pour simuler des sondages longs, j'ai inclus une API Express REST dans l'exemple de code qui répond aux informations météorologiques en temps réel de la ville après cinq tentatives. Voici l'API REST:

function *myIterator(){
  //计算值 1
  yield value1;

  //计算值 2
  yield value2;
  ...

  //计算值 n
  yield valuen;
}

Maintenant, écrivons une fonction de générateur qui appelle cette API plusieurs fois et renvoie une promesse sur chaque itération. Sur le client, nous ne savons pas combien d'itérations nous obtiendrons des données du serveur. Ainsi, cette méthode aura une boucle infinie, chaque itération pingre le serveur et renvoie une promesse sur chaque itération. Ce qui suit est la mise en œuvre de cette méthode:

var polls=0;

app.get('/api/currentWeather', function(request, response){
  console.log(polls, polls < 5);
  if(polls < 5){
    polls++;
    response.send({});
  } else {
    response.send({temperature: 25});
  }
});

Nous avons besoin d'une fonction pour appeler en permanence cette fonction et vérifier si la valeur existe après les analyses de promesse. Ce sera une fonction récursive qui appelle la prochaine itération du générateur et n'arrêtera le processus que si la valeur renvoyée du générateur est trouvée. L'extrait de code suivant montre l'implémentation de cette méthode et les instructions qui appellent cette méthode:

function *pollForWeatherInfo(){
  while(true){
    yield fetch('/api/currentWeather',{
      method: 'get'
    }).then(function(d){
      var json = d.json();
      return json;
    });
  }
}

Comme nous le voyons ici, le premier appel à la fonction runPolling crée l'objet générateur. La méthode next renvoie un objet avec l'attribut value, qui dans notre cas contient la promesse renvoyée par la méthode fetch. Lorsque cette promesse analyse, elle contiendra un objet vide (retourner si la variable polls est inférieure à 5), ou un autre objet contenant les informations requises.

Ensuite, nous vérifions la propriété temperature de cet objet (cela indiquera le succès). S'il n'existe pas, nous transmettons l'objet générateur à l'appel de fonction suivant (pour éviter de perdre l'état du générateur), ou nous imprimons la valeur de l'objet à la console.

Pour voir comment cela fonctionne, obtenez le code de notre référentiel, installez les dépendances, démarrez le serveur et accédez à https://www.php.cn/link/494ad0d24e15c7da81c7ea265c7f4cb4 voir le shell suivant Résultats:

0 vrai Envoi ... vide 1 vrai Envoi ... vide 2 vrai Envoi ... vide 3 vrai Envoi ... vide 4 vrai Envoi ... vide 5 faux Envoi ... objet

et l'objet lui-même imprimé sur la console du navigateur.

appels asynchrones de plusieurs dépendances

Habituellement, nous devons implémenter plusieurs appels asynchrones de dépendance, où chaque fonctionnement asynchrone ultérieur dépend de la valeur renvoyée par l'opération asynchrone précédente. Si nous avons un ensemble de telles opérations et qu'ils doivent être appelés plusieurs fois, nous pouvons les mettre dans une fonction de générateur et l'exécuter si nécessaire.

Pour démontrer cela, j'utiliserai l'API de GitHub. Cette API nous donne accès aux informations de base sur les utilisateurs, les organisations et les référentiels. Nous utiliserons cette API pour obtenir une liste de contributeurs au référentiel aléatoire de l'organisation et afficher les données récupérées à l'écran.

Pour ce faire, nous devons appeler trois points de terminaison différents. Voici les tâches qui doivent être effectuées:

  • Obtenez des détails sur l'organisation
  • Si l'organisation existe, obtenez le référentiel de l'organisation
  • obtenir des contributeurs à l'un des référentiels de l'organisation (sélectionné au hasard)

Créons une fonction de wrapper autour de l'API Fetch pour éviter une écriture répétée du code pour créer des en-têtes et construire des objets de demande.

function *myIterator(){
  while(condition){
    //计算要返回的下一个值
    yield value;
  }
}

La fonction suivante utilise la fonction ci-dessus et produit une promesse sur chaque appel:

function *myIterator(){
  //计算值 1
  yield value1;

  //计算值 2
  yield value2;
  ...

  //计算值 n
  yield valuen;
}

Maintenant, écrivons un morceau de logique pour appeler la fonction ci-dessus pour obtenir le générateur, puis remplir l'interface utilisateur avec les valeurs obtenues à partir du serveur. Étant donné que chaque appel à la méthode next du générateur renvoie une promesse, nous devrons relier ces promesses. Ce qui suit est le cadre de code pour le générateur renvoyé à l'aide de la fonction ci-dessus:

var polls=0;

app.get('/api/currentWeather', function(request, response){
  console.log(polls, polls < 5);
  if(polls < 5){
    polls++;
    response.send({});
  } else {
    response.send({temperature: 25});
  }
});

(La partie de démonstration est omise ici car le codepen ne peut pas être rendu dans Markdown)

Conclusion

Dans cet article, j'ai démontré comment utiliser l'API Fetch avec un générateur pour construire une API asynchrone. Ecmascript 6 apportera beaucoup de nouvelles fonctionnalités à la langue, trouver des moyens créatifs de les combiner et tirer parti de leur pouvoir conduit souvent à d'excellents résultats. Mais que pensez-vous? Est-ce une technologie que nous pouvons commencer à utiliser immédiatement dans notre application? J'aimerais entendre vos pensées dans les commentaires.

(La partie FAQ est omise ici car le contenu est fortement dupliqué à partir des informations précédentes)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
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
Python vs JavaScript: une analyse comparative pour les développeursPython vs JavaScript: une analyse comparative pour les développeursMay 09, 2025 am 12:22 AM

La principale différence entre Python et JavaScript est le système de type et les scénarios d'application. 1. Python utilise des types dynamiques, adaptés à l'informatique scientifique et à l'analyse des données. 2. JavaScript adopte des types faibles et est largement utilisé pour le développement frontal et complet. Les deux ont leurs propres avantages dans la programmation asynchrone et l'optimisation des performances, et doivent être décidées en fonction des exigences du projet lors du choix.

Python vs JavaScript: Choisir le bon outil pour le travailPython vs JavaScript: Choisir le bon outil pour le travailMay 08, 2025 am 12:10 AM

Que ce soit pour choisir Python ou JavaScript dépend du type de projet: 1) Choisissez Python pour les tâches de science et d'automatisation des données; 2) Choisissez JavaScript pour le développement frontal et complet. Python est favorisé pour sa bibliothèque puissante dans le traitement et l'automatisation des données, tandis que JavaScript est indispensable pour ses avantages dans l'interaction Web et le développement complet.

Python et Javascript: comprendre les forces de chacunPython et Javascript: comprendre les forces de chacunMay 06, 2025 am 12:15 AM

Python et JavaScript ont chacun leurs propres avantages, et le choix dépend des besoins du projet et des préférences personnelles. 1. Python est facile à apprendre, avec une syntaxe concise, adaptée à la science des données et au développement back-end, mais a une vitesse d'exécution lente. 2. JavaScript est partout dans le développement frontal et possède de fortes capacités de programmation asynchrones. Node.js le rend adapté au développement complet, mais la syntaxe peut être complexe et sujet aux erreurs.

Core de JavaScript: est-il construit sur C ou C?Core de JavaScript: est-il construit sur C ou C?May 05, 2025 am 12:07 AM

Javascriptisnotbuiltoncorc; il est en interprétéLanguageThatrunSoninesoftenwritteninc .1) javascriptwasdesignedasalightweight, interprété de LanguageForwebbrowsers.2) EnginesevolvedFromSimpleInterpreterstoJitCompilers, typicalinc, impropringperformance.

Applications JavaScript: de front-end à back-endApplications JavaScript: de front-end à back-endMay 04, 2025 am 12:12 AM

JavaScript peut être utilisé pour le développement frontal et back-end. L'endouage frontal améliore l'expérience utilisateur via les opérations DOM, et le back-end gère les tâches du serveur via Node.js. 1. Exemple frontal: modifiez le contenu du texte de la page Web. 2. Exemple backend: Créez un serveur Node.js.

Python vs JavaScript: Quelle langue devez-vous apprendre?Python vs JavaScript: Quelle langue devez-vous apprendre?May 03, 2025 am 12:10 AM

Le choix de Python ou JavaScript doit être basé sur le développement de carrière, la courbe d'apprentissage et l'écosystème: 1) le développement de carrière: Python convient à la science des données et au développement de back-end, tandis que JavaScript convient au développement frontal et complet. 2) Courbe d'apprentissage: la syntaxe Python est concise et adaptée aux débutants; La syntaxe JavaScript est flexible. 3) Ecosystème: Python possède de riches bibliothèques informatiques scientifiques, et JavaScript a un puissant cadre frontal.

Frameworks javascript: alimenter le développement Web moderneFrameworks javascript: alimenter le développement Web moderneMay 02, 2025 am 12:04 AM

La puissance du cadre JavaScript réside dans la simplification du développement, l'amélioration de l'expérience utilisateur et les performances des applications. Lorsque vous choisissez un cadre, considérez: 1. Taille et complexité du projet, 2. Expérience d'équipe, 3. Écosystème et soutien communautaire.

La relation entre JavaScript, C et BrowsersLa relation entre JavaScript, C et BrowsersMay 01, 2025 am 12:06 AM

INTRODUCTION Je sais que vous pouvez le trouver étrange, que doit faire exactement JavaScript, C et Browser? Ils semblent sans rapport, mais en fait, ils jouent un rôle très important dans le développement Web moderne. Aujourd'hui, nous discuterons du lien étroit entre ces trois. Grâce à cet article, vous apprendrez comment JavaScript fonctionne dans le navigateur, le rôle de C dans le moteur du navigateur et comment ils fonctionnent ensemble pour stimuler le rendu et l'interaction des pages Web. Nous connaissons tous la relation entre JavaScript et Browser. JavaScript est la langue principale du développement frontal. Il fonctionne directement dans le navigateur, rendant les pages Web vives et intéressantes. Vous êtes-vous déjà demandé pourquoi javascr

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft