Maison >interface Web >js tutoriel >Comment puis-je résoudre les promesses de manière séquentielle en JavaScript ?

Comment puis-je résoudre les promesses de manière séquentielle en JavaScript ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-15 07:37:09674parcourir

How Can I Resolve Promises Sequentially in JavaScript?

Résoudre les promesses de manière séquentielle

Cet article explore les moyens de résoudre le problème de la résolution des promesses de manière séquentielle.

Le L'extrait de code fourni utilise la récursion pour lire un tableau de fichiers en série, ne résolvant la promesse qu'une fois que tous les fichiers ont été lus. Bien que cette approche soit fonctionnelle, elle introduit une récursion inutile.

Une alternative plus simple consiste à exploiter une boucle for ou à réduire pour enchaîner les résolutions de promesse :

var readFiles = function(files) {
  var p = Promise.resolve(); // Q() in q

  files.forEach(file =>
      p = p.then(() => readFile(file)) 
  );
  return p;
};

Avec réduire :

var readFiles = function(files) {
  return files.reduce((p, file) => {
     return p.then(() => readFile(file));
  }, Promise.resolve()); // initial
};

Les bibliothèques Promise fournissent souvent des méthodes utilitaires pour la résolution séquentielle, telles que map() de Bluebird avec concurrence : 1 :

var Promise = require("bluebird");
var fs = Promise.promisifyAll(require("fs"));

var readAll = Promise.resolve(files).map(fs.readFileAsync,{concurrency: 1 });

Dans le JavaScript moderne, les fonctions asynchrones peuvent également être utilisées pour des promesses séquentielles :

async function readFiles(files) {
  for(const file of files) {
    await readFile(file);
  }
};

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn