Il n'y a pas de moyen d'attendre en javascript
Tout est executé sur le champ
Il n'y a que le even loop qui à le droit de ne rien faire
Lorsqu'on ouvre un fichier
Lorsqu'on fait une "request" à quelque chose
Lorsqu'on retourne une response
Et à plein d'autre place
function sayHello(){
console.log("Hello world");
}
setTimeout(sayHello, 1000);
sayHello dans setTimeout(sayHello, 1000);. Ceci est un callbackfunction sayBye() {
console.log("Good Bye Mate.");
}
function sayHello(){
console.log("Hello world");
setTimeout(sayBye, 1000)
}
setTimeout(sayHello, 1000)
Rapidement, du mauvais code avec des callback... devient un "callback hell"
au lieu de prendre les callbacks en arguments, les fonctions devraient retourner un petit objet qui possède une fonction next.
import delay from "https://esm.sh/delay@6.0.0";
function sayHello(){
console.log("Hello world");
}
delay(1000).then(sayHello)
import delay from "https://esm.sh/delay@6.0.0";
function sayHello(){
console.log("Hello world");
}
function sayBye() {
console.log("Good Bye Mate.");
}
delay(1000)
.then(sayHello)
.then(sayBye)
import delay from "https://esm.sh/delay@6.0.0";
function sayHello(){
console.log("Hello world");
}
function sayBye() {
console.log("Good Bye Mate.");
}
function wait1Seconds(){
return delay(1000);
}
delay(1000)
.then(sayHello)
.then(wait1Seconds)
.then(sayBye)
les promises sont utilisées partout
Finalement, l'API est finale
D'autre languages ont fait des choses cool
import delay from "https://esm.sh/delay@6.0.0";
function sayHello(){
console.log("Hello world");
}
function sayBye() {
console.log("Good Bye Mate.");
}
async function wait1Seconds() {
await delay(1000);
}
await delay(1000);
sayHello();
await wait1Seconds()
sayBye()
await?¶Dans le top level d'un module
Dans une fonction qui est async
async function wait1SecondsAndReturn1() {
await delay(1000);
return 90;
}
Si une fonction est async, automatiquement la valeur de retour sera wrappé dans une Promise
99.9% du temps que nous crérons des Promise, ce sera via async/await
const url = "https://didier-ahuntsic.gitlab.io/cours-420-317-ah/data/grades.json";
const resp = await fetch(url);
const payload = await resp.json();
console.log(payload);
nodejs
browser
deno
bun
mon micro-ondes
Malheureusement pour nous, il est souvant défendu de "fetcher" un url dans le navigateur. Vois:
import * as path from "https://deno.land/std@0.202.0/path/mod.ts";
const home = Deno.env.get("HOME");
if(home === undefined){
throw new Error("home not found");
}
const filePath = path.join(home, "tailor.json")
const text = await Deno.readTextFile(filePath);
console.log(text);
const text = await Deno.readTextFile("/dev/null");
console.log(text);
Deno.readTextFile retourne une promise de stringconst filePath = "/dev/null";
const content = "merci dev null d'exister";
await Deno.writeTextFile(filePath, content);
Télécharger https://didier-ahuntsic.gitlab.io/cours-420-317-ah/data/grades.json dans un fichier sur votre ordinateur
Écrire une fonction qui reçoit une liste d'url et qui télécharge tous les urls en attendant 1 seconde entre chaque téléchargement
Télécharger tous les fichiers inscript sur https://didier-ahuntsic.gitlab.io/cours-420-317-ah/data/exo-index.json
Écrire une fonction qui reçoit une liste d'URL et qui les téléchargents le plus rapidement possible.