Source: utils/chunks.js

/**
 * @description `chunkArray` Divise un tableau en plus petits blocs et appelle une fonction fournie sur chaque bloc.
 *
 * @param {Object} obj - Un objet contenant le tableau à diviser, la taille de chaque bloc,et la fonction à appeler sur chaque bloc.
 * @param {Array} obj.credentials - les données de base pour la fonction à appeler sur chaque bloc.(space, token...)
 * @param {Array} obj.myArray - Le tableau à diviser.
 * @param {number} obj.chunk - La taille voulue de chaque bloc.
 * @param {Function} obj.fn_to_call - La fonction à appeler sur chaque bloc.
 * @return {void} Cette fonction ne renvoie rien.
 */
export function chunkArray(obj, getResponse, getError) {
  const { credentials, myArray, chunk, fn_to_call } = obj;

  const chunks = [];
  for (let i = 0; i < myArray.length; i += chunk) {
    const arrayChunks = myArray.slice(i, i + chunk);
    chunks.push(arrayChunks);
  }

  loopingChunk(
    { credentials, chunks, initLoop: 0, fn: fn_to_call },
    (rep) => {
      if (getResponse) getResponse(rep);
    },
    (err) => {
      if (getError) getError(err);
    }
  );
}

/**
 * @description `loopingChunk` Exécute une boucle sur un tableau de chunks, en appelant une fonction fournie sur chaque chunk.
 *
 * @param {Object} obj - Un objet contenant le tableau de chunks, l'index de démarrage de la boucle et la fonction à appeler sur chaque chunk.
 * @param {Array} obj.credentials - les données de base pour la fonction à appeler.
 * @param {Array} obj.chunks - Le tableau de chunks sur lequel effectuer la boucle.
 * @param {number} obj.initLoop - L'index de démarrage de la boucle.
 * @param {Function} obj.fn - La fonction à appeler sur chaque chunk. La fonction doit prendre trois arguments : le chunk actuel, une fonction de rappel, et deux fonctions de rappel facultatives pour gérer les réponses de succès et d'erreur.
 * @return {void} Cette fonction ne renvoie rien.
 */
function loopingChunk(obj, onDone, onError) {
  const { credentials, chunks, initLoop, fn } = obj;
  const loop = (i) => {
    fn(
      credentials,
      chunks[i],
      () => {
        i++;
        if (i < chunks.length) {
          loop(i);
        }
      },
      (response) => {
        if (onDone) {
          onDone(response);
        }
      },
      (error) => {
        if (onError) {
          onError(error);
        }
      }
    );
  };
  loop(initLoop);
}