Maison >interface Web >js tutoriel >Comment puis-je résoudre les promesses de manière séquentielle en 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!