Javascript : l'asynchrone

Introduction Introduction

Le langage Javascript permet de travailler de manière asynchrone, cela signifie que l’on va travailler avec éléments qui ne vont pas forcément répondre dans l’ordre avec lequel ils ont été appelés. Les Timers sont une bonne entrée en matière pour comprendre le concept.

Synchrone vs asynchrone Synchrone vs asynchrone

Créer une fonction d’attente synchrone Créer une fonction d’attente synchrone

function sleep(milliseconds) {
  const date = Date.now();
  let currentDate = null;
  do {
    currentDate = Date.now();
  } while (currentDate - date < milliseconds);
}

console.log('first call');
sleep(2000);
console.log('second call');
console.log('third call');

Dans cet exemple, on temporise l’exécution du second console.log en exécutant notre fonction d’attente entre deux. Nous obtenons bien une temporisation mais de manière itérative, on est obligé d’attendre pour passer à la suite.

Résultat temporisation synchrone

Créer une fonction d’attente asynchrone Créer une fonction d’attente asynchrone

function wait(duration, message) {
  setTimeout(() => {
    console.log(message);
  }, duration);
}

console.log('first call');
wait(2000, 'second call');
console.log('third call');

Dans cette version, on utilise un setTimeout pour créer notre fonction de temporisation. La méthode setTimeout de Javascript permet de créer une temporisation d’exécution sur une fonction. Pour cela, il suffit d’entourer votre fonction à exécuter d’un setTimeout. Il prend en second paramètre un délai en milliseconde.

Voir la documentation du setTimeout

Résultat temporisation asynchrone

Cette fois-ci, le troisième console.log est exécuté avant que ne soit terminée la temporisation du second console.log.

Garder l&#39;ordre d&#39;exécution Garder l'ordre d'exécution

Si l’on souhaite enchainer l’exécution de plusieurs fonctions asynchrone tout en conservant l’ordre d’exécution, nous allons devoir utiliser de système de callbacks.

Les fonctions de callbacks Les fonctions de callbacks

Les fonctions de callback sont des fonctions qui sont passées en paramètre d’une autre fonction et elle est exécutée dans la fonction parente.

Attention

La fonction parent ne connait pas forcément ce que fera la fonction passée en paramètre.

function chainedAsyncLog() {
  setTimeout(() => {
    console.log('first call');
    setTimeout(() => {
      console.log('second call');
      setTimeout(() => {
        console.log('third call');
      }, 1000);
    }, 1000);
  }, 1000);
}
chainedAsyncLog();

De cette manière, on s’assure de l’ordre d’exécution des fonctions asynchrone. L’inconvénient princpale de ce pattern est la lisibilité du code (Callback Hell). Heureusement, Javascipt implémente d’autres fonctionnalités qui permettent de gérer cela de manière beaucoup plus lisible : Les Promesses.

Retour à la liste des articles
Github de Samuel Gomez Linkedin de Samuel Gomez Twitter de Samuel Gomez Instagram de Samuel Gomez
Allez en haut