Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
code_language:javascript [2025/11/02 15:27] 74.7.227.242 ancienne révision (2025/11/02 13:15) restaurée |
code_language:javascript [2025/11/02 15:51] (Version actuelle) 74.7.227.242 ancienne révision (2025/11/02 13:06) restaurée |
||
|---|---|---|---|
| Ligne 426: | Ligne 426: | ||
| constante PI | constante PI | ||
| * ''' | * ''' | ||
| - | constante pour | + | constante pour racine carrée de 0,5 |
| + | * ''' | ||
| + | constante pour racine carrée de 2 | ||
| + | |||
| + | == Méthode == | ||
| + | |||
| + | * ''' | ||
| + | valeur positive | ||
| + | * ''' | ||
| + | arc cosinus | ||
| + | * ''' | ||
| + | arc sinus | ||
| + | * ''' | ||
| + | arc tangente | ||
| + | * ''' | ||
| + | nombre entier supérieur le plus proche | ||
| + | * ''' | ||
| + | cosinus | ||
| + | * ''' | ||
| + | valeur exponentielle | ||
| + | * ''' | ||
| + | nombre entier inférieur le plus proche | ||
| + | * ''' | ||
| + | utilisation du logarithme naturel | ||
| + | * ''' | ||
| + | le plus grand de deux chiffres | ||
| + | * ''' | ||
| + | le plus petit de deux chiffres | ||
| + | * ''' | ||
| + | nombre puissance exposant | ||
| + | * ''' | ||
| + | 0 ou 1 aléatoire | ||
| + | * ''' | ||
| + | arrondi commercial d'un nombre | ||
| + | * ''' | ||
| + | sinus | ||
| + | * ''' | ||
| + | racine carrée | ||
| + | * ''' | ||
| + | tangente | ||
| + | |||
| + | |||
| + | === Number === | ||
| + | == Propriétés == | ||
| + | *''' | ||
| + | plus grand nombre pouvant être sauvegardé | ||
| + | *''' | ||
| + | plus petit nombre pouvant être sauvegardé | ||
| + | *''' | ||
| + | nombre non valable | ||
| + | *''' | ||
| + | nombre trop petit | ||
| + | *''' | ||
| + | nombre trop grand | ||
| + | |||
| + | == Méthode == | ||
| + | *''' | ||
| + | |||
| + | *''' | ||
| + | |||
| + | *''' | ||
| + | |||
| + | *''' | ||
| + | |||
| + | |||
| + | === Opérateurs arithmétiques === | ||
| + | |||
| + | == Addition et soustraction == | ||
| + | |||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | let totalCDs = 67; | ||
| + | let totalVinyls = 34; | ||
| + | let totalMusic = totalCDs + totalVinyls; | ||
| + | </ | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | let cookiesInJar = 10; | ||
| + | let cookiesRemoved = 2; | ||
| + | let cookiesLeftInJar = cookiesInJar - cookiesRemoved; | ||
| + | </ | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | let cookiesInJar = 10; | ||
| + | /* manger deux cookies */ | ||
| + | cookiesInJar -= 2; //il reste 8 cookies | ||
| + | /* cuisson d'un nouveau lot de cookies */ | ||
| + | cookiesInJar += 12; // il y a maintenant 20 cookies dans la boîte | ||
| + | </ | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | let numberOfLikes = 10; | ||
| + | numberOfLikes++; | ||
| + | numberOfLikes--; | ||
| + | </ | ||
| + | == Multiplication et division == | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | let costPerProduct = 20; | ||
| + | let numberOfProducts = 5; | ||
| + | let totalCost = costPerProduct * numberOfProducts; | ||
| + | let averageCostPerProduct = totalCost / numberOfProducts; | ||
| + | </ | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | let numberOfCats = 2; | ||
| + | numberOfCats *= 6; // numberOfCats vaut maintenant 2*6 = 12; | ||
| + | numberOfCats /= 3; // numberOfCats vaut maintenant 12/3 = 4; | ||
| + | </ | ||
| + | |||
| + | == Mutabilité des variables == | ||
| + | Les variables sont soit mutable, c'est a dire que l'on peut modifier leur affectation, | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | const nombrePostParPage = 20; | ||
| + | nombrePostParPage = 30; // Retournera une erreur dans la console car on ne peut plus changer sa valeur | ||
| + | </ | ||
| + | |||
| + | ===== Structure de contrôle ===== | ||
| + | === Return === | ||
| + | Employé dans une fonction, provoque le retour au programme appelant avec renvoi facultatif d'un résultat. | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | function ma_fonction(aparam) | ||
| + | { | ||
| + | s = ""; | ||
| + | if (aparam == "" | ||
| + | return; | ||
| + | else | ||
| + | s = "Le résultat"; | ||
| + | return s; // Renvoie le contenu de s | ||
| + | } | ||
| + | </ | ||
| + | === if === | ||
| + | Permet de définir l' | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | a = 5; | ||
| + | if (a==5) | ||
| + | | ||
| + | </ | ||
| + | === else === | ||
| + | Utilisé conjointement à if, permet d' | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | a = 5 | ||
| + | if (a==5) | ||
| + | | ||
| + | else | ||
| + | | ||
| + | </ | ||
| + | === switch === | ||
| + | Utilisé conjointement à case, permet d' | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | function test(condition) | ||
| + | { | ||
| + | | ||
| + | { | ||
| + | case " | ||
| + | | ||
| + | break; | ||
| + | case " | ||
| + | | ||
| + | break; | ||
| + | case " | ||
| + | | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | === case === | ||
| + | Utilisé à l' | ||
| + | === break=== | ||
| + | Utilisé à l' | ||
| + | === default === | ||
| + | Utilisé à l' | ||
| + | === for === | ||
| + | Introduit une boucle itérative deterministe. | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | for (i=0; | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | For each : "for ...in ..." ou "for ... of ..." | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | var array = [1, 2, 3]; | ||
| + | for (line in array) | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | |||
| + | for(i in array) | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | |||
| + | for(arrayItem of array) | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | En tableau associatif : | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | var array = { " | ||
| + | for (line in array) | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | === do === | ||
| + | Introduit une boucle itérative indeterministe conditionnelle avec test effectué à chaque tour par " | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | i=0 | ||
| + | do | ||
| + | { | ||
| + | i++ | ||
| + | | ||
| + | } | ||
| + | while(i< | ||
| + | </ | ||
| + | |||
| + | === while === | ||
| + | Introduit une boucle itérative indeterministe conditionnelle: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | i=0 | ||
| + | while(i< | ||
| + | { | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | === continue === | ||
| + | Utilisé dans une boucle " | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | for (i=-2; | ||
| + | { | ||
| + | if (i==0) continue; // Si i == 0, on passe directement à 1 | ||
| + | alert(5/ | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Gestion des erreurs ===== | ||
| + | |||
| + | === throw === | ||
| + | Provoque une erreur personnalisée. | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | throw new Error(" | ||
| + | </ | ||
| + | |||
| + | === try ... catch ... finally === | ||
| + | Évalue un bloc (try) en capturant les erreurs, tente de les gérer (catch) si elles se produisent, et quoiqu' | ||
| + | |||
| + | ===== Opérateur ===== | ||
| + | === in === | ||
| + | Opérateur qui détermine l' | ||
| + | === new === | ||
| + | Opérateur qui permet l' | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | var mon_tableau = new Array(); | ||
| + | </ | ||
| + | |||
| + | === instanceof === | ||
| + | Cet opérateur permet de tester si une valeur est une instance d'un objet : | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | t = new Array(); | ||
| + | alert(t instanceof Array); // Affiche true | ||
| + | alert(t instanceof Date); // Affiche false | ||
| + | </ | ||
| + | |||
| + | === typeof === | ||
| + | Cet opérateur renvoie le type de la variable placée à droite. | ||
| + | Les valeurs renvoyées par typeof correspondent aux types de variables JavaScript, soit : boolean string number function object undefined. | ||
| + | |||
| + | === delete === | ||
| + | Cet opérateur permet de supprimer une propriété. | ||
| + | |||
| + | |||
| + | ===== Valeurs spéciales ===== | ||
| + | === this === | ||
| + | Dans le constructeur ou une méthode d'un objet, c'est une référence à l' | ||
| + | === true === | ||
| + | Valeur booléenne " | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | if (true) | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | === false === | ||
| + | Valeur booléenne " | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | if (true) | ||
| + | { | ||
| + | if (ma_bool == false) | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | === null === | ||
| + | Valeur de type " | ||
| + | |||
| + | === undefined === | ||
| + | C'est la valeur de toutes les variables inexistantes ou supprimées. | ||
| + | |||
| + | |||
| + | ===== Fonctions prédéfinies ===== | ||
| + | * decodeURL() | ||
| + | * décode une url codée | ||
| + | * decodeURLComponent() | ||
| + | * décode une URl codée - II | ||
| + | * encodeURL() | ||
| + | * coder une URL | ||
| + | * encodeURLComponent() | ||
| + | * code une URL - II | ||
| + | * eval() | ||
| + | * transforme une expression | ||
| + | * escape() | ||
| + | * transforme des signes ASCII en nombres | ||
| + | * isFinite() | ||
| + | * vérifie le domaine numérique de valeurs | ||
| + | * isNaN() | ||
| + | * vérifie si la valeur n'est pas un nombre | ||
| + | * parseFloat() | ||
| + | * transform en nombre avec décimales | ||
| + | * parseInt() | ||
| + | * transform en nombre entier | ||
| + | * Number() | ||
| + | * transforme un objet en nombre | ||
| + | * String() | ||
| + | * transforme le contenu d'un objet en une chaine de caractères | ||
| + | * unescape() | ||
| + | * transforme des nombres en caractères ASCII | ||
| + | ===== Programmation avancée ===== | ||
| + | |||
| + | === Paradigme de programmation classe/ | ||
| + | |||
| + | Premier exemple: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | /** | ||
| + | * Modélisation d'une voiture | ||
| + | * | ||
| + | * @class Voiture | ||
| + | */ | ||
| + | var Voiture = (function () { | ||
| + | //'use strict'; | ||
| + | |||
| + | Voiture.couleur = " | ||
| + | // methode de classe | ||
| + | Voiture.construire = function (marque) { | ||
| + | return new Voiture(marque); | ||
| + | }; | ||
| + | |||
| + | // constructeur | ||
| + | function Voiture(marque) { | ||
| + | this.marque = marque; | ||
| + | } | ||
| + | |||
| + | // méthodes d' | ||
| + | Voiture.prototype = { | ||
| + | |||
| + | rouler: function (direction) { | ||
| + | document.write(" | ||
| + | }, | ||
| + | getMarque: function (){ | ||
| + | return this.marque; | ||
| + | } | ||
| + | }; | ||
| + | |||
| + | return Voiture; | ||
| + | |||
| + | }()); | ||
| + | |||
| + | // -> | ||
| + | var saab = new Voiture(' | ||
| + | var chrysler = Voiture.construire(' | ||
| + | chrysler.rouler(); | ||
| + | alert(saab.getMarque()); | ||
| + | </ | ||
| + | Deuxième exemple: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | var article = new Object(); | ||
| + | article.nom = " | ||
| + | article.prix_unitaire = 21.99; | ||
| + | article.quantite = 2; | ||
| + | </ | ||
| + | Variante: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | function Article(nom, | ||
| + | { | ||
| + | this.nom = nom; | ||
| + | this.prix_unitaire = prix_unitaire; | ||
| + | this.quantite = quantite; | ||
| + | this.resume = function(){ | ||
| + | return this.nom+" | ||
| + | " | ||
| + | } | ||
| + | return this; | ||
| + | } | ||
| + | var article = new Article( " | ||
| + | </ | ||
| + | Troisième exemple: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | var article = { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | return this.nom+" | ||
| + | " | ||
| + | } | ||
| + | }; | ||
| + | </ | ||
| + | Quatrième exemple avec Imbrications: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | var commandes = [ | ||
| + | { " | ||
| + | " | ||
| + | { " | ||
| + | { " | ||
| + | ], | ||
| + | " | ||
| + | }, | ||
| + | { " | ||
| + | " | ||
| + | { " | ||
| + | { " | ||
| + | ], | ||
| + | " | ||
| + | } | ||
| + | ]; | ||
| + | </ | ||
| + | |||
| + | Création d'une classe: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | class Book { | ||
| + | constructor(title, | ||
| + | this.title = title; | ||
| + | this.author = author; | ||
| + | this.pages = pages; | ||
| + | } | ||
| + | } //création de la classe avec son constructeur. | ||
| + | |||
| + | var myBook = new Book(" | ||
| + | // instanciation d'un objet book par le constructeur. | ||
| + | </ | ||
| + | |||
| + | === Methode de classe === | ||
| + | |||
| + | Comme en Java classique: les méthodes créer dans une classe sont accessible depuis n' | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | class BankAccount { | ||
| + | | ||
| + | this.owner = owner; | ||
| + | this.balance = balance; | ||
| + | } | ||
| + | //Ici création de la méthode dite d' | ||
| + | | ||
| + | console.log(" | ||
| + | } | ||
| + | } | ||
| + | const newAccount = new BankAccount(" | ||
| + | newAccount.showBalance(); | ||
| + | </ | ||
| + | Il y a également les méthode Static, invocable depuis l' | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | class BePolite { | ||
| + | |||
| + | static sayHello() { | ||
| + | console.log(" | ||
| + | } | ||
| + | |||
| + | static sayHelloTo(name) { | ||
| + | console.log(" | ||
| + | } | ||
| + | |||
| + | static add(firstNumber, | ||
| + | return firstNumber + secondNumber; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | BePolite.sayHello(); | ||
| + | |||
| + | BePolite.sayHelloTo(" | ||
| + | |||
| + | const sum = BePolite.add(2, | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Frameworks ===== | ||
| + | ==== Visual Studio Code ==== | ||
| + | ==== Dojo ==== | ||
| + | ==== jQuery==== | ||
| + | ==== Node.js==== | ||
| + | ==== React.js==== | ||
| + | |||
| + | ===== Développement Web avec js ===== | ||
| + | |||
| + | |||
| + | ==== DOM ==== | ||
| + | |||
| + | Le DOM: Document Object Model est une interface de programmation qui est une représentation du HTML d'une page web et qui permet d' | ||
| + | Il faut voir le DOM comme un arbre ou chaque éléments peut avoir zero ou plusieurs enfants: | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | ==== Le document et accès à ses éléments ==== | ||
| + | |||
| + | Le document est l' | ||
| + | |||
| + | Principales fonctions de recherche d' | ||
| + | < | ||
| + | Recherche un élément grâce à son " id ". On rappel qu'il n'y a qu'un seul élément avec un " id " donné. | ||
| + | Exemple: | ||
| + | Si on a dans notre page HTML la l' | ||
| + | <code html [enable_line_numbers=" | ||
| + | On aura pour accéder à cet élément avec js: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | < | ||
| + | Recherche un élément grâce à sa " Classe ". On rappel qu'il peut y avoir plusieurs éléments avec un " nom de classe " donné. Il renverra la liste des éléments des cette classe. | ||
| + | Exemple: | ||
| + | Si on a dans notre page HTML la l' | ||
| + | <code html [enable_line_numbers=" | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | </ | ||
| + | </ | ||
| + | On aura pour accéder à cet élément avec js: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | const firstContent = contents[0]; | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Recherche un élément grâce à son " Tag name " soit son " nom de balise " donné. Il renverra la liste des éléments correspondants. | ||
| + | Exemple: | ||
| + | Si on a dans notre page HTML la l' | ||
| + | <code html [enable_line_numbers=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | On aura pour accéder à cet élément avec js: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | const thirdArticle = contents[2]; | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Recherche un élément grâce à un selecteur qui permet de cibler certains éléments. | ||
| + | Exemple: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | fera une recherche dans l' | ||
| + | Si on a dans notre page HTML la l' | ||
| + | <code html [enable_line_numbers=" | ||
| + | <p> | ||
| + | < | ||
| + | <a href="#"> | ||
| + | < | ||
| + | </ | ||
| + | <p class=" | ||
| + | < | ||
| + | < | ||
| + | <a href="#"> | ||
| + | </ | ||
| + | <p> | ||
| + | <a href="#"> | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | On aura pour accéder à cet élément avec js: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | </ | ||
| + | Nous retournera uniquement Lien 6. | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | Ne revoie pas de liste de résultats, mais le premier élément qui correspond à la recherche. | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | Revoie une liste de résultats correspondant au " | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | Renvoi la liste des enfants de cet élément. | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | Renvoi LE parents de cet élément. | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | Ces propriétés nous permettent de naviguer vers l' | ||
| + | |||
| + | Si on a dans notre page HTML la l' | ||
| + | <code html [enable_line_numbers=" | ||
| + | <div id=" | ||
| + | <div id=" | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | <div id=" | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | On aura pour accéder à cet élément avec js: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | Nous aurons ceci: | ||
| + | * < | ||
| + | * < | ||
| + | * < | ||
| + | * < | ||
| + | |||
| + | ==== Modifier le contenu d'un élément ==== | ||
| + | |||
| + | Pour modifier le contenue d'un élément: deux fonction principale. | ||
| + | * < | ||
| + | * < | ||
| + | Attention ces deux fonction remplace directement le contenu actuel de l' | ||
| + | |||
| + | === innerHTML === | ||
| + | |||
| + | innerHTML demande à ce que vous entriez du texte représentant un contenu HTML: | ||
| + | Exemple: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | element.innerHTML = "< | ||
| + | |||
| + | L' | ||
| + | <code html[enable_line_numbers=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | === textContent === | ||
| + | textContent , quant à elle, demande un simple texte qui ne sera pas interprété comme étant du HTML, le texte prendra la place du contenue de l' | ||
| + | |||
| + | === Modifier des classes === | ||
| + | Il est possible d' | ||
| + | < | ||
| + | Cette propriété fournit aussi une série de fonctions permettant de modifier cette liste de classes. En voici quelques-unes: | ||
| + | * < | ||
| + | * < | ||
| + | * < | ||
| + | * < | ||
| + | |||
| + | Exemple: | ||
| + | <code javascript [enable_line_numbers=" | ||
| + | element.classList.add(" | ||
| + | element.classList.remove(" | ||
| + | element.classList.contains(" | ||
| + | element.classList.replace(" | ||
| + | </ | ||
| + | === Changer les styles d'un élément === | ||
| + | |||
| + | Avec la propriété < | ||
| + | style est un objet qui a une propriété pour chaque style existant. | ||
| + | Exemple: | ||
| + | <code javascript [enable_line_numbers=" | ||
| + | element.style.color = "# | ||
| + | element.style.backgroundColor = "# | ||
| + | element.style.fontWeight = " | ||
| + | </ | ||
| + | |||
| + | ==== Modifier les attributs ==== | ||
| + | |||
| + | Pour définir ou remplacer les attributs d'un élément, vous pouvez utiliser la fonction < | ||
| + | |||
| + | < | ||
| + | On peut également utiliser les fonctions: | ||
| + | < | ||
| + | < | ||
| + | pour avoir accès à plus de contrôle sur les attributs. | ||
| + | Exemple: | ||
| + | <code javascript [enable_line_numbers=" | ||
| + | element.setAttribute(" | ||
| + | element.setAttribute(" | ||
| + | element.getAttribute(" | ||
| + | </ | ||
| + | ==== Créez de nouveaux éléments ==== | ||
| + | |||
| + | === Création d'un nouveau élément === | ||
| + | C'est la fonction < | ||
| + | < | ||
| + | prend en paramètre le nom de la balise de notre élément et nous renvoie l' | ||
| + | |||
| + | <code javascript [enable_line_numbers=" | ||
| + | const newElement = document.createElement(" | ||
| + | </ | ||
| + | |||
| + | Un élément créé avec cette fonction ne fait pas encore partie du document, vous ne le verrez donc pas sur votre page. Pour le voir, il va d' | ||
| + | |||
| + | === Ajoutez des enfants === | ||
| + | |||
| + | La façon la plus connue pour ajouter un élément dans notre page est < | ||
| + | Cette fonction permet d' | ||
| + | |||
| + | < | ||
| + | |||
| + | Exemple: | ||
| + | |||
| + | <code javascript [enable_line_numbers=" | ||
| + | const newElt = document.createElement(" | ||
| + | let elt = document.getElementById(" | ||
| + | |||
| + | element.appendChild(newElt); | ||
| + | </ | ||
| + | Avec le code ci-dessous, nous venons de créer un nouvel élément de type, mais qui n'est pas encore rattaché au DOM. Nous avons ensuite récupéré l' | ||
| + | |||
| + | === Ajoutez des enfants === | ||
| + | Il existe les fonctions < | ||
| + | < | ||
| + | < | ||
| + | Exemple: | ||
| + | |||
| + | <code javascript [enable_line_numbers=" | ||
| + | const newElt = document.createElement(" | ||
| + | let elt = document.getElementById(" | ||
| + | elt.appendChild(newElt); | ||
| + | |||
| + | elt.removeChild(newElt); | ||
| + | elt.replaceChild(document.createElement(" | ||
| + | </ | ||
| + | |||
| + | ==== Ecoutez des événements ==== | ||
| + | |||
| + | Un événement est une réaction à une action émise par l' | ||
| + | |||
| + | Un événement en JavaScript est représenté par un nom ( " | ||
| + | Un événement est par défaut propagé, c'est à dire que si nous n' | ||
| + | |||
| + | Cette fonction " | ||
| + | |||
| + | |||
| + | === Réagir lors d'un clic sur un élément === | ||
| + | |||
| + | Ecouter un événement: | ||
| + | < | ||
| + | Cette fonction nous permet d' | ||
| + | < | ||
| + | Tableau des événement à écouter: | ||
| + | ^Type événement ^ Description ^ Documentation ^ | ||
| + | | Animation | Liés à lAPI web Animation | Événements d' | ||
| + | | Récupération asynchrone des données | Événements liés à l' | ||
| + | | Presse-papiers | Les événements liés à l'API Clipboard API. Utilisé pour notifier lorsque le contenu est coupé, copié ou collé. https:// | ||
| + | | Composition | Événements liés à la composition ; saisie " | ||
| + | | Transition CSS | Événements liés aux Transitions CSS. Fournit des événements de notification lorsque les transitions CSS commencent, s' | ||
| + | | Base de données | Événements liés aux opérations de la base de données : ouverture, fermeture, transactions, | ||
| + | | Glisser/ | ||
| + | | Focus | Les événements liés aux éléments qui gagnent et perdent le focus. | Événements déclenchés sur Element, Window. | ||
| + | | Formulaire | Événements liés à la construction, | ||
| + | | Plein écran | Evénements relatifs à l'API Fullscreen API https:// | ||
| + | | Manette de jeu | Evénements relatifs à l'API Gamepad API. https:// | ||
| + | | Historique | Les événements liés à l'API de Manipulation de l' | ||
| + | | Gestion de l' | ||
| + | | Entrées | Événements liés aux éléments d' | ||
| + | | Clavier | Événements liés à l' | ||
| + | | Chargement/ | ||
| + | | Manifeste | Événements liés à l' | ||
| + | | Médias | Événements liés à l' | ||
| + | | Messagerie | Événements liés à la réception par une fenêtre d'un message provenant d'un autre contexte de navigation. | ||
| + | | Souris | Événements liés à l' | ||
| + | | Réseau/ | ||
| + | | Paiements | Les événements liés à l'API Payment Request API. https:// | ||
| + | | Performance | Événements liés aux APIs Performance API, Performance Timeline API, Navigation Timing API (en-US), User Timing API (en-US), et Resource Timing API (en-US). | ||
| + | | Pointeur | Les événements liés à l'API Pointer Events API.Fournit une notification agnostique du matériel à partir des dispositifs de pointage, y compris la souris, la souris tactile, le stylo/ | ||
| + | | Impression | Événements liés à l' | ||
| + | | Rejet de promesse | Événements envoyés au contexte global du script lorsqu' | ||
| + | | Sockets | Les événements liés à l'API WebSockets API. https:// | ||
| + | | SVG | Événements liés aux images SVG. | Événements déclenchés sur SVGElement, https:// | ||
| + | | Sélection de texte | Événements liés à la sélection du texte. https:// | ||
| + | | Tactile | Les événements liés à l'API Événements tactiles. https:// | ||
| + | | Réalité virtuelle | Les événements liés à l'API WebXR Device API. https:// | ||
| + | | RTC (communication en temps réel | Les événements liés à l'API WebRTC API.https:// | ||
| + | | Evenement envoyés par le serveur | Les événements liés à l'API des événements envoyés par le serveur. https:// | ||
| + | | Synthèse vocale | Les événements liés à l'API Web Speech API. https:// | ||
| + | | Workers | Les événements liés aux APIs Web Workers API, Service Worker API | Événements déclenchés sur ServiceWorkerGlobalScope, | ||
| + | |||
| + | Exemple avec un événement "click sur la souris": | ||
| + | Réagir au click sur un lien, il faut d' | ||
| + | < | ||
| + | |||
| + | " | ||
| + | |||
| + | Exemple: | ||
| + | <code javascript [enable_line_numbers=" | ||
| + | const elt = document.getElementById(' | ||
| + | elt.addEventListener(' | ||
| + | elt.innerHTML = " | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Même exemple en modifiant le comportement par défaut de l' | ||
| + | <code javascript [enable_line_numbers=" | ||
| + | const elt = document.getElementById(' | ||
| + | elt.addEventListener(' | ||
| + | event.preventDefault(); | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | De plus : avec < | ||
| + | Exemple: | ||
| + | <code javascript [enable_line_numbers=" | ||
| + | elementInterieur.addEventListener(' | ||
| + | event.stopPropagation(); | ||
| + | elementAvecMessage.innerHTML = " | ||
| + | }); | ||
| + | </ | ||
| + | De cette manière, lorsque l'on clique sur l' | ||
| + | |||
| + | |||
| + | ==== Récupérez des données utilisateurs avec les événement ==== | ||
| + | |||
| + | Nous savons écouter un événement, | ||
| + | |||
| + | Lorsqu' | ||
| + | De plus chaque événement implémente l' | ||
| + | |||
| + | |||
| + | * AnimationEvent | ||
| + | * AudioProcessingEvent | ||
| + | * BeforeInputEvent | ||
| + | * BeforeUnloadEvent | ||
| + | * BlobEvent | ||
| + | * CloseEvent | ||
| + | * CompositionEvent | ||
| + | * CSSFontFaceLoadEvent | ||
| + | * CustomEvent | ||
| + | * DeviceMotionEvent | ||
| + | * DeviceOrientationEvent | ||
| + | * DOMTransactionEvent | ||
| + | * EditingBeforeInputEvent | ||
| + | * ErrorEvent | ||
| + | * FetchEvent | ||
| + | * FocusEvent | ||
| + | * InputEvent | ||
| + | * KeyboardEvent | ||
| + | * MediaStreamEvent | ||
| + | * MessageEvent | ||
| + | * MouseEvent | ||
| + | * PageTransitionEvent | ||
| + | * PointerEvent | ||
| + | * RelatedEvent | ||
| + | * SensorEvent | ||
| + | * SVGZoomEvent | ||
| + | * TransitionEvent | ||
| + | * UIEvent | ||
| + | * WheelEvent | ||
| + | |||
| + | === Détection de la souris === | ||
| + | |||
| + | Dès que la souris bouge, notre fonction callback sera appelée avec un paramètre detype " | ||
| + | |||
| + | Entre autres, ce que cet objet nous permet de récupérer: | ||
| + | * " | ||
| + | * " | ||
| + | * " | ||
| + | * " | ||
| + | * " | ||
| + | |||
| + | Exemple: | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | element.addEventListener(' | ||
| + | const x = event.offsetX; | ||
| + | const y = event.offsetY; | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | === Lire le contenu d'un champ texte === | ||
| + | |||
| + | On peut voir dans la liste des événements qu'il existe un événement " | ||
| + | |||
| + | Exemple: | ||
| + | Pour récupérer la valeur de notre champ une fois qu'il a été modifié, il suffit d' | ||
| + | |||
| + | Dans le cas ou je souhaite pouvoir avoir la valeur dès que l' | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | input.addEventListener(' | ||
| + | output.innerHTML = event.target.value; | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | ==== API et service web ==== | ||
| + | Les services web et les API sont des éléments essentiels aux applications web. N’importe quel site sur lequel vous naviguez est un service web, et il fournit une API pour communiquer avec | ||
| + | |||
| + | Service web = programme s' | ||
| + | Le but d'un service web est donc de fournir un service à celui qui le demande et pour ce faire il met à disposition une API (Application Programming Interface). | ||
| + | |||
| + | API = ensemble des demandes que l'on peut faire à un service web. Ces demandes sont appelées des requêtes. | ||
| + | |||
| + | Requêtes = données qui respectent le protocole de communication approprié et qui sont envoyées au serveur. | ||
| + | |||
| + | Pour notre cas nous allons nous limiter aux requête respectant le protocole HTTP: | ||
| + | * Les méthodes = action que l'on souhaite faire. | ||
| + | * GET = récupérer des ressources | ||
| + | * POST = créer ou modifier une ressources | ||
| + | * PUT = modifier une ressource | ||
| + | * DELETE = supprimer une ressource. | ||
| + | * L'URL = adresse du serveur ayant le service web demandé | ||
| + | * Les données = ressources à traiter. | ||
| + | |||
| + | Une fois la requête soumis, le serveur répond et renvoi: | ||
| + | * des données = une page HTML par exemple. | ||
| + | * Le code HTTP = code numérique indiquant comment s'est déroulée la requête. | ||
| + | * 200 : indique que tout s'est bien passé | ||
| + | * 400 : indique que votre requête n'est pas conforme à ce qui est attendu | ||
| + | * 401 : indique que vous devez être authentifié pour faire cette requête | ||
| + | * 403 : indique que vous êtes bien authentitfié mais que vous n' | ||
| + | * 404 : indique que la ressource demandée n' | ||
| + | * 500 : indique une erreur avec le service web. | ||
| + | * Autre : https:// | ||
| + | |||
| + | === Fetch === | ||
| + | Fetch est un ensemble d' | ||
| + | |||
| + | L'API Fetch va nous permettre d' | ||
| + | * Avoir un site plus réactif (pas besoin de recharger la page) | ||
| + | * Améliorer l' | ||
| + | |||
| + | Envoyer une requête: | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | |||
| + | Ce code nous permet d' | ||
| + | |||
| + | Maintenant il faut récupérer et interpréter la réponse à la requête faite par le serveur. | ||
| + | |||
| + | Un service web peut choisir le format qu'il veut pour nous revoyer des données, mais le plus courant et le plus simple est le format JSON. | ||
| + | |||
| + | === JSON === | ||
| + | JSON = JavaScript Object Notation. Il s'agit d'un format textuel se rapprochant en termes de syntaxe de celui des objets dans le langage JavaScript. | ||
| + | |||
| + | Exemple, l' | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | const obj = { | ||
| + | name: "Mon contenu", | ||
| + | id: 1234, | ||
| + | message: "Voici mon contenu", | ||
| + | author: { | ||
| + | name: " | ||
| + | }, | ||
| + | comments: [ | ||
| + | { | ||
| + | id: 45, | ||
| + | message: " | ||
| + | }, | ||
| + | { | ||
| + | id: 46, | ||
| + | message: " | ||
| + | } | ||
| + | ] | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | Sera retranscrit ainsi en JSON: | ||
| + | |||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | { | ||
| + | id: 46, | ||
| + | " | ||
| + | } | ||
| + | ] | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Le gros avantage de ce format (json) lorsqu' | ||
| + | LE deuxième gros avantage du format (json) est sa légèreté par rapport à un format comme le XML, qui reste bien plus verbeux, la communication avec un service web en json optimisera donc les temps de réponse. | ||
| + | |||
| + | Récupérez le résultat de la requête: | ||
| + | |||
| + | Fetch va nous renvoyer une " | ||
| + | La Promise est un objet qui fournit une fonction " | ||
| + | |||
| + | Exemple voici comment procéder avec un service qui fait un simple echo: | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | fetch(“https:// | ||
| + | .then(function(res) { | ||
| + | if (res.ok) { | ||
| + | return res.json(); | ||
| + | } | ||
| + | }) | ||
| + | .then(function(value) { | ||
| + | console.log(value); | ||
| + | }) | ||
| + | .catch(function(err) { | ||
| + | // Une erreur est survenue | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | L'URL passée à la fonction " | ||
| + | Nous appelons ensuite la fonction " | ||
| + | Voici ce que nous obtenons de l'API à l' | ||
| + | |||
| + | {{code_language: | ||
| + | |||
| + | ==== Validez les données saisies des utilisateurs ==== | ||
| + | |||
| + | === Validez les données suite à des événements === | ||
| + | |||
| + | Afin de valider les données utilisateurs, | ||
| + | |||
| + | Par exemple, vous pouvez vérifier que ce qui est saisi commence par " | ||
| + | |||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | myInput.addEventListener(' | ||
| + | var value = e.target.value; | ||
| + | if (value.startsWith(' | ||
| + | isValid = true; | ||
| + | } else { | ||
| + | isValid = false; | ||
| + | } | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | === Validation plus complexe avec les Regex === | ||
| + | |||
| + | Regex permet de vérifier qu'un texte corresponde à une description que l'on a définie. Ainsi, si l'on veut savoir si notre texte commence par la lettre | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | function isValid(value) { | ||
| + | return / | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Documentation Regex: https:// | ||
| + | |||
| + | === Les contraintes HTML5 === | ||
| + | |||
| + | |||
| + | Depuis HTML version 5, il est possible d' | ||
| + | |||
| + | Pour cela, différents attributs sont ajoutés et permettent d' | ||
| + | |||
| + | == l' | ||
| + | |||
| + | Pour valider les informations saisies dans une balise | ||
| + | |||
| + | L' | ||
| + | |||
| + | Lorsque vous ajoutez un élément | ||
| + | |||
| + | == Les attributs de validations simples == | ||
| + | |||
| + | En fonction du " | ||
| + | |||
| + | * " | ||
| + | * " | ||
| + | * " | ||
| + | * " | ||
| + | |||
| + | == Les patterns == | ||
| + | |||
| + | Nous avons vu qu'il était possible d' | ||
| + | |||
| + | Par exemple, si on prend le code suivant : | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | <input type=" | ||
| + | </ | ||
| + | il empêchera un utilisateur d' | ||
| + | |||
| + | Documentation : https:// | ||
| + | |||
| + | |||
| + | ==== Sauvegardez des données sur le service web ==== | ||
| + | |||
| + | Pour envoyer des données a un serveur par l'HTTP ou HTTPS on a les méthodes POST et PUT. | ||
| + | |||
| + | |||
| + | === POST === | ||
| + | |||
| + | Afin d' | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | fetch(" | ||
| + | method: “POST”, | ||
| + | headers: { | ||
| + | ' | ||
| + | ' | ||
| + | }, | ||
| + | body: JSON.stringify(jsonBody) | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Comme vous pouvez le voir, nous avons passé le contenu à envoyer au service web à notre fonction | ||
| + | |||
| + | Pour faire cette transformation, | ||
| + | * " | ||
| + | * " | ||
| + | |||
| + | Ces options sont envoyées avec la requête grâce au second paramètre de la fonction fetch(). Ce paramètre est un objet qui permet de définir : | ||
| + | * La méthode HTTP, le body, c'est à dire les données qu'on souhaite envoyer, | ||
| + | * Les headers qui donnent un peu plus d' | ||
| + | |||
| + | === PUT === | ||
| + | |||
| + | PUT fonctionne exactement de la même manière que POST. | ||
| + | |||
| + | ==== L' | ||
| + | |||
| + | === Définition === | ||
| + | |||
| + | Un code Synchrone est un code qui s' | ||
| + | Un code Asynchrone est un code qui execute des lignes en parallèle, comme du multy-thread. | ||
| + | |||
| + | Or JavaScript est mono-Thread et Synchrone, cependant le coeur de javaScript fonctionne autour de la technologie Event Loop, permettant de classer les fonctions en plusieurs liste d' | ||
| + | |||
| + | === Méthode " | ||
| + | Cette fonction est très répandue lorsque l'on veut exécuter du code asynchrone sans bloquer le fil d' | ||
| + | |||
| + | * La fonction à exécuter de manière asynchrone (qui sera donc ajoutée à la file d' | ||
| + | * le délai, en millisecondes, | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | setTimeout(function() { | ||
| + | console.log(" | ||
| + | }, 5000); | ||
| + | |||
| + | console.log(" | ||
| + | </ | ||
| + | |||
| + | Dans l' | ||
| + | |||
| + | La fonction " | ||
| + | |||
| + | Documentation setTimeout: https:// | ||
| + | |||
| + | === Les autres " | ||
| + | |||
| + | Il existe d' | ||
| + | * setInterval : fonctionne comme " | ||
| + | * Documentation https:// | ||
| + | * setImmediate: | ||
| + | * Documentation: | ||
| + | |||
| + | === Fonction asynchrone par nature === | ||
| + | * Les evenements: Sont toujours exécutés de façon asynchrone. | ||
| + | * Les input/ | ||
| + | * Quelques autres... (callBack, Promise, et les Async/ | ||
| + | |||
| + | === CallBacks === | ||
| + | |||
| + | Une callback est simplement une fonction que vous définissez. Le principe de la callback est de la passer en paramètre d'une fonction asynchrone. Une fois que la fonction asynchrone a fini sa tâche, elle va appeler notre fonction callback en lui passant un résultat. | ||
| + | |||
| + | exemple: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | element.addEventListener(' | ||
| + | // Do something here ... | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Les callbacks sont faciles à comprendre et à utiliser, mais elles souffrent d'un gros problème de lisibilité du code, via ce qu'on appelle le callback hell. En effet, on se retrouve régulièrement dans des situations où on va imbriquer plusieurs couches de callbacks , rendant le code difficile à lire et pouvant générer des erreurs. | ||
| + | |||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | elt.addEventListener(' | ||
| + | mysql.connect(function(err) { | ||
| + | mysql.query(sql, | ||
| + | fs.readFile(filePath, | ||
| + | mysql.query(sql, | ||
| + | // etc ... | ||
| + | }); | ||
| + | }); | ||
| + | }); | ||
| + | }); | ||
| + | }); | ||
| + | </ | ||
| + | C'est bien beau de gérer du code asynchrone, mais rien ne vous garantit que tout se soit bien passé. Il nous faut donc un mécanisme pour savoir si une erreur est survenue ! | ||
| + | |||
| + | === Gerer les erreurs callbacks === | ||
| + | Pour gérer les erreurs avec les callbacks, la méthode la plus utilisée est de prendre 2 paramètres dans notre callback. Le 2e paramètre est notre donnée et le 1er est l' | ||
| + | |||
| + | Si on reprend l' | ||
| + | |||
| + | exemple: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | fs.readFile(filePath, | ||
| + | if (err) { | ||
| + | throw err; | ||
| + | } | ||
| + | // Do something with data | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | === Promise === | ||
| + | Lorsqu' | ||
| + | |||
| + | Cette promesse est en fait un objet " | ||
| + | |||
| + | Lorsque l'on récupère une " | ||
| + | |||
| + | Exemple: | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | functionThatReturnsAPromise() | ||
| + | .then(function(data) { | ||
| + | // Do somthing with data | ||
| + | }) | ||
| + | .catch(function(err) { | ||
| + | // Do something with error | ||
| + | }); | ||
| + | </ | ||
| + | Dans l' | ||
| + | |||
| + | Le gros avantage est que l'on peut aussi chaîner les " | ||
| + | |||
| + | exemple: | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | returnAPromiseWithNumber2() | ||
| + | .then(function(data) { // Data is 2 | ||
| + | return data + 1; | ||
| + | }) | ||
| + | .then(function(data) { // Data is 3 | ||
| + | throw new Error(' | ||
| + | }) | ||
| + | .then(function(data) { | ||
| + | // Not executed | ||
| + | }) | ||
| + | .catch(function(err) { | ||
| + | return 5; | ||
| + | }) | ||
| + | .then(function(data) { // Data is 5 | ||
| + | // Do something | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Dans l' | ||
| + | La première fonction " | ||
| + | Puis, dans cette fonction on retourne " | ||
| + | Puis, dans le " | ||
| + | De ce fait, le " | ||
| + | |||
| + | " | ||
| + | |||
| + | === Async/Await === | ||
| + | " | ||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | async function fonctionAsynchrone1() {/* code asynchrone */} | ||
| + | async function fonctionAsynchrone2() {/* code asynchrone */} | ||
| + | |||
| + | async function fonctionAsynchrone3() { | ||
| + | const value1 = await fonctionAsynchrone1(); | ||
| + | const value2 = await fonctionAsynchrone2(); | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Gerer des erreurs async/ | ||
| + | |||
| + | async/await utilisant les " | ||
| + | Pour intercepter cette erreur, par contre, il suffit d' | ||
| + | |||
| + | ==== Parallélisez plusieurs requêtes HTTP ==== | ||
| + | |||
| + | === Enchaînez des requêtes avec les callbacks === | ||
| + | On peut formuler plusieurs requêtes serveur en parallèle puis ensuite les suivre avec une requête en séquence avec les callbacks. | ||
| + | |||
| + | Pour cet exemple, nous partons du principe que nous avons accès à 2 fonctions (get et post). Elles font respectivement une requête " | ||
| + | * l'URL de la requête, | ||
| + | * Une callback à executer quand on a le résultat (avec une variable d' | ||
| + | |||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | var GETRequestCount = 0; | ||
| + | var GETRequestResults = []; | ||
| + | |||
| + | function onGETRequestDone(err, | ||
| + | if (err) throw err; | ||
| + | |||
| + | GETRequestCount++; | ||
| + | GETRequestResults.push(result); | ||
| + | |||
| + | if (GETRequestCount == 2) { | ||
| + | post(url3, function(err, | ||
| + | if (err) throw err; | ||
| + | |||
| + | // We are done here ! | ||
| + | }); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | get(url1, onGETRequestDone); | ||
| + | get(url2, onGETRequestDone); | ||
| + | </ | ||
| + | |||
| + | |||
| + | Afin d' | ||
| + | |||
| + | Par contre, nous voulons exécuter une requête " | ||
| + | |||
| + | " | ||
| + | |||
| + | === Enchaînez des requêtes avec les Promise === | ||
| + | |||
| + | Grâce à la fonction " | ||
| + | |||
| + | Pour cet exemple, nous partons du principe que nous avons accès à 2 fonctions ( " | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | Promise.all([get(url1), | ||
| + | .then(function(results) { | ||
| + | return Promise.all([results, | ||
| + | }) | ||
| + | .then(function(allResults) { | ||
| + | // We are done here ! | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Ici, nous utilisons la fonction " | ||
| + | |||
| + | Ainsi, la fonction " | ||
| + | |||
| + | Afin d' | ||
| + | |||
| + | Notez: | ||
| + | Notez que dans la fonction " | ||
| + | |||
| + | === Enchaînez des requêtes avec les async/await === | ||
| + | |||
| + | Finalement, voyons comment exécuter le même code mais avec async / await . | ||
| + | |||
| + | Pour cet exemple, nous partons du principe que nous avons accès à 2 fonctions ( " | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | async function requests() { | ||
| + | var getResults = await Promise.all([get(url1), | ||
| + | var postResult = await post(url3); | ||
| + | return [getResults, | ||
| + | } | ||
| + | |||
| + | requests().then(function(allResults) { | ||
| + | // We are done here ! | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Nous utilisons aussi la fonction " | ||
| + | |||
| + | Par contre, ici, nous utilisons " | ||
| + | |||
| + | Lorsque nous appelons la fonction " | ||
| + | |||
| + | ==== Optimisation du code ==== | ||
| + | |||
| + | === Linter, minifier, bundler, transpiler === | ||
| + | |||
| + | <code JavaScript [enable_line_numbers=" | ||
| + | |||
| + | </ | ||
| + | |||