Async: La documentation a besoin de meilleurs exemples

Créé le 14 janv. 2019  ·  21Commentaires  ·  Source: caolan/async

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

docs help wanted

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.

Tous les 21 commentaires

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 ?

  • Exemples avec plus de async / await , moins avec des rappels
  • Des exemples plus concrets d'applications du monde réel, moins foo / bar
  • Choses qui montrent le "sweet spot" pour Async -- des choses qui sont difficiles à faire sans la bibliothèque
  • Des exemples sont accessibles aux nouveaux arrivants sur Node/JS qui montrent comment les paramètres circulent
  • Des exemples plus complets montrant plus de fonctionnalités de méthodes individuelles

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()])
  )
);
Cette page vous a été utile?
0 / 5 - 0 notes