Considérez cet exemple pour la carte
async.map(['file1','file2','file3'], fs.stat, function(err, results) {
// results is now an array of stats for each file
});
Cela ne me dit rien à part la syntaxe. Dans la plupart des cas, les gens ne passeront pas fs.stat
. Les exemples doivent inclure l'utilisation de toutes les options possibles. Tous les exemples pour toutes les fonctions et méthodes doivent être mis à jour. ils sont trop simplistes
Je suis d'accord, nous avons besoin de bien meilleurs docs. J'aimerais également modifier de nombreux exemples (ou ajouter des exemples mroe) pour utiliser async/wait. Cependant, c'est quelque chose qui prend du temps que je n'ai pas pour le moment.
Peut-être que je peux aider.
Comment puis-je aider avec des exemples ?
async
/ await
, moins avec des rappelsfoo
/ bar
Il y a des blocs @example
dans les commentaires JSDoc pour la plupart des méthodes. Devenir fou!
note pour cet exemple particulier, vous pouvez faire
await async.map(['file1','file2','file3'], fs.promises.stat);
// or without async lib
await Promise.all(['file1','file2','file3'].map(name => fs.promises.stat(name))
ou si vous voulez un objet comme résultat
await async.auto({
file1: async()=>fs.promises.stat('file1'),
file2: async()=>fs.promises.stat('file2')
file3: async()=>fs.promises.stat('file3')
})
// or without async lib
Object.fromEntries(
await Promise.all(['file1','file2','file3'].map(async name => [name, await fs.promises.stat(name)]))
)
Je recherche en particulier un exemple (simple) basé sur Promise d'async.mapLimit, même sans async/await. Je n'ai trouvé aucun exemple de non-rappel jusqu'à présent.
@flatcoding https://github.com/caub/misc/blob/master/utils/promise-concurrent.js , si vous ne voulez pas await
, vous pouvez le remplacer par une fonction récursive
Salut Cyril @caub ,
Merci pour votre réponse. Je ne suis pas particulièrement contre « wait », plutôt par souci de « bons exemples » pour le module « async » avec lequel j'aimerais commencer et voir une implémentation avec une gestion de base de Promise, y compris .then .catch.
Honnêtement, j'ai du mal à utiliser async avec Promises en général, donc avant d'utiliser async/wait, j'aimerais commencer par l'étape 1) ...
Au fait, merci d'avoir partagé votre exemple, je ne suis pas tout à fait sûr de son rapport avec le module asynchrone.
Je pensais que par "exemple simple basé sur une promesse", vous vouliez dire un exemple sans aucune bibliothèque
si vous vouliez un exemple avec cette bibliothèque, je suis sûr qu'il y en a plein
D'accord, donc je suis d'accord en général avec l'utilisation de Promises, et je comprends également comment utiliser les modules 'async' dans le style de rappel. Comme l'indique la documentation, sans rappels fournis, il renverrait une promesse. Jusqu'à présent, je n'ai pas pu trouver d'exemples, pas pour async.map(Limit) du moins. Comme ce fil traite de "meilleurs exemples" dans la documentation, j'en ai parlé ici...
Et comme je l'ai dit, je ne pouvais vraiment pas le faire fonctionner avec une promesse non plus, j'ai même soulevé un problème à ce sujet.
Salut @caub , a
@romanbalayan sympa
les méthodes que nous utilisons le plus sont async.parallel
, et async.auto
, prévoyez-vous de les couvrir également ?
note: je pense que vous pourriez éviter l'async IIFE (async ()=>{
dans les exemples async/wait, pour rendre les choses plus légères
@caub , demande d'extraction mise à jour pour supprimer IIFE. (Je l'utilisais pour tester localement si les échantillons fonctionnaient réellement)
Oui, j'aimerais aussi aborder le contrôle de flux bientôt. En fait, j'attendais juste des commentaires si les modifications que j'ai apportées aux exemples de collection correspondent aux attentes ici.
@romanbalayan ce que vous pouvez faire est de configurer cette branche PR en tant que page github (allez dans votre fork d'async, paramètres> pages Github> Source: (choisissez votre branche PR)) afin que nous puissions la prévisualiser dans http://romanbalayan.github .io/async/v3/
@caub , super idée. A fait cela, et devrait être disponible maintenant sur https://romanbalayan.github.io/async/v3/
Salut @caub ,
Ajout d'échantillons Promise et async/wait pour les méthodes de contrôle de flux - async.parallel
, async.series
et async.auto
@romanbalayan sympa ! https://romanbalayan.github.io/async/v3/docs.html#auto
J'ai l'impression que les exemples de rappel et de promesses sont toujours assez similaires, cela vaut probablement la peine d'en avoir un seul, car de toute façon, lors de l'utilisation de promesses, nous préférons opter pour async/attendre, et cela allégerait les choses
Bonnes choses d'autre!
@caub
Dois-je également supprimer l'exemple d'utilisation Promises sur les méthodes Collections ?
je pense que oui tu pourrais
Également pour les méthodes de contrôle de flux, vous pouvez ajouter des exemples avec des fonctions internes asynchrones, par exemple :
const delay = (t, v) => new Promise(r => setTimeout(r, t, v));
try {
console.time('parallel')
const results = await async.parallel({
one: async () => delay(200, 1),
two: async () => delay(100, 2),
});
console.timeLog('parallel', results);
// parallel: 200ms { one: 1, two: 2 }
}
catch (err) {
console.log(err);
}
@romanbalayan excellent travail. J'aurais aimé trouver votre version de la documentation il y a quelques jours ! J'ai découvert comment les choses fonctionnaient par essais et erreurs après tout, mais cela aurait été moins douloureux avec les nouveaux exemples :-)
Je ne suis toujours pas sûr à 100% de l'utilité de certaines des méthodes asynchrones maintenant que nous avons async/await et Promise.all ainsi que Promise.allSettled .. Fondamentalement, je me demande s'il existe des équivalents natifs de toutes les méthodes à ce stade . (?)
const results = await async.parallel({
one: async () => delay(200, 1),
two: async () => delay(100, 2),
});
s'écrirait nativement :
const results = Object.fromEntries(
await Promise.all(
Object.entries({
one: async () => delay(200, 1),
two: async () => delay(100, 2),
})
.map(async ([k, v]) => [k, await v()])
)
);
Commentaire le plus utile
Je suis d'accord, nous avons besoin de bien meilleurs docs. J'aimerais également modifier de nombreux exemples (ou ajouter des exemples mroe) pour utiliser async/wait. Cependant, c'est quelque chose qui prend du temps que je n'ai pas pour le moment.