exercice

 Réécrire ce code avec async

On modifiera la lig.2 par const readline = require('readline').promises;

  1. const fs = require('fs');
  2. const readline = require('readline');
  3. const { stdin: input, stdout: output } = require('process');

  4. const rl = readline.createInterface({ input, output });

  5. rl.question('give some file names? ', (f) => {

  6.   const filenames = f.split(" ");
  7.   let counts = filenames.map(f => {
  8.     try {
  9.       const data = fs.readFileSync(f, { encoding: 'utf8' });
  10.       return `${f}: ${data.split('\n').length} lines`;
  11.     } catch (err) {
  12.       return `${f}: couldn't read file`;
  13.     }
  14.   });
  15.   console.log(counts.join('\n'));


  16.   rl.close();
  17. });


Async/sync

Code synchrone / bloquant 

  1. const { readFileSync, writeFileSync } = require('fs')
  2. console.log('start')
  3. const first = readFileSync('./content/first.txt', 'utf8')
  4. const second = readFileSync('./content/second.txt', 'utf8')

  5. writeFileSync(
  6.   './content/result-sync.txt',
  7.   `Here is the result : ${first}, ${second}`,
  8.   { flag: 'a' }
  9. )
  10. console.log('end')
  11. console.log('new')

Code asynchrone / non bloquant  

  1. const { readFile, writeFile } = require('fs')

  2. console.log('start')
  3. readFile('./content/first.txt', 'utf8', (err, result) => {
  4.   if (err) {
  5.     console.log(err)
  6.     return
  7.   }
  8.   const first = result
  9.   readFile('./content/second.txt', 'utf8', (err, result) => {
  10.     if (err) {
  11.       console.log(err)
  12.       return
  13.     }
  14.     const second = result
  15.     writeFile(
  16.       './content/result-async.txt',
  17.       `Here is the result : ${first}, ${second}`,
  18.       (err, result) => {
  19.         if (err) {
  20.           console.log(err)
  21.           return
  22.         }
  23.         console.log('end')
  24.       }
  25.     )
  26.   })
  27. })

  28. console.log('new')

Code asynchrone / non bloquant / promese


  1. const { readFile, writeFile } = require('fs').promises

  2. console.log('start');
  3. let result = "";
  4. readFile('./content/first.txt', 'utf8')
  5.   .then((text) => {
  6.     result = result.concat(text);
  7.     return readFile('./content/second.txt', 'utf8')
  8.   })
  9.   .then((text) => {
  10.     result = result.concat(text);
  11.     writeFile('./content/promise.txt', `result: ${result}`, { flag: 'a' })
  12.   })
  13.   .then(() => console.log('end'))
  14.   .catch((err) => console.log(err))
  15. console.log('new');


Code asynchrone / non bloquant / async

  1. const { readFile, writeFile } = require('fs').promises

  2. console.log('start');
  3. const start = async () => {
  4.   try {
  5.     const first = await readFile('./content/first.txt', 'utf8')
  6.     const second = await readFile('./content/second.txt', 'utf8')
  7.     await writeFile('./content/async.txt',`result : ${first} ${second}`,{ flag: 'a' })
  8.     console.log('end');
  9.   } catch (error) {
  10.     console.log(error)
  11.   }
  12. }

  13. start()
  14. console.log('new');

Notez le code exécuté en paralléle.

const { readFile, writeFile } = require('fs').promises

console.log('start');
const read1 = readFile('./content/first.txt', 'utf8')
const read2 = readFile('./content/second.txt', 'utf8')

Promise.all([read1, read2]).then((values) => {
  writeFile('./content/promise.txt', `result: ${values.join(" ")}`, { flag: 'a' })
  console.log('end');
});
console.log('new');

DM : Affichage des règles d'un jeu !

 

 

 J'aimerais afficher les règles du jeu !


Rules of the game
Rule 1: 🧻 wins 🪨
Rule 2: 🪨 wins ✂️
Rule 3: ✂️ wins 🧻
✂️  plays against 🧻
         RULE : ✂️  would winw against 🧻
🏆PLAYER1 WINS

Mais comment eviter ce genre d'écriture ! 

if (player1 == '🪨' && player2 == '🧻' ||
  player1 == '🧻' && player2 == '✂️' ||
  player1 == '✂️' && player2 == '🪨') {
  msg = 'player1 lost';
}
if (player1 == '🪨' && player2 == '✂️' ||
  player1 == '🧻' && player2 == '🪨' ||
  player1 == '✂️' && player2 == '🧻') {
  msg = 'player1 win';
}

Il est clair qu'il faut pouvoir changer de formes ou des règles facilement !

Rules of the game
Rule 1: 1️⃣  wins 2️⃣
Rule 2: 2️⃣  wins 3️⃣
Rule 3: 3️⃣  wins 1️⃣
3️⃣   plays against 2️⃣
         RULE : 3️⃣   would win against 1️⃣
 PLAYER1 LOSES!

Rules of the game
Rule 1: ✌️  wins 🖖
Rule 2: 🖖 wins ✊
Rule 3: ✊ wins ✌️
🖖  plays against 🖖
         RULE : 🖖  would win against ✊
DRAW

Class

 Cours


TD



DM🚗et héritage🏎️🚙


Créer une class Car avec les propriétés d'instances  : fuel et distance

fuel = 0;
distance = 0;

Ajouter la méthode move 

 si le niveau de  .fuel < 1
    throw new RangeError('Fuel tank is depleted')
  sinon la valeur de fuel diminue de 1 et la distance augmente de 2


Ajoutez une méthode addFuel qui ajoute une unité au fuel 

si le niveau n'est pas supérieur à 10 sinon
    throw new RangeError('Fuel tank is full')
 

Ajoutez une méthode statique isFaster qui compare la vitesse (topSpeed) de deux voitures. On ajoute pour cela au constructeur une propriété .topSpeed = Math.random()

Créer une classe Tesla qui hérite de Car


Ajouter à Tesla une méthode move() 

Move appelle la méthode move de Car avec une distance de 4.


Modifier le code pour que Tesla soit quatre fois plus rapide qu'une Car


help


Travail perso





See the Pen dessin heritage mouton by dupont (@dupontcodepen) on CodePen.

asynchrone

 


L'asynchrone est partout

promise : https://dupontdenis.github.io/asyn-promise-asyn/promise.html

async : https://dupontdenis.github.io/asyn-promise-asyn/await.html


Accès aux BDs

asynchrone exemple

ℹ️ (sqlite node)


Cours

 Cours : callback-promise-async

TD-callback

TD- wait

TD-accès github asyn.