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
Libérer: 2024-12-15 07:37:09
original
672 Les gens l'ont consulté

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;
};
Copier après la connexion

Avec réduire :

var readFiles = function(files) {
  return files.reduce((p, file) => {
     return p.then(() => readFile(file));
  }, Promise.resolve()); // initial
};
Copier après la connexion

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 });
Copier après la connexion

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);
  }
};
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal