Async: Dokumentation braucht bessere Beispiele

Erstellt am 14. Jan. 2019  ·  21Kommentare  ·  Quelle: caolan/async

Betrachten Sie dieses Beispiel für die Karte

async.map(['file1','file2','file3'], fs.stat, function(err, results) {
    // results is now an array of stats for each file
});

Dies sagt mir im Grunde nichts außer Syntax. In den meisten Fällen werden die Leute fs.stat nicht passieren. Die Beispiele sollten die Verwendung aller möglichen Optionen beinhalten. Alle Beispiele für alle Funktionen und Methoden müssen aktualisiert werden. Sie sind zu einfach

docs help wanted

Hilfreichster Kommentar

Ich stimme zu, wir brauchen viel bessere Dokumente. Ich möchte auch viele der Beispiele ändern (oder weitere Beispiele hinzufügen), um async/await zu verwenden. Dies ist jedoch etwas, das Zeit braucht, die ich im Moment nicht habe.

Alle 21 Kommentare

Ich stimme zu, wir brauchen viel bessere Dokumente. Ich möchte auch viele der Beispiele ändern (oder weitere Beispiele hinzufügen), um async/await zu verwenden. Dies ist jedoch etwas, das Zeit braucht, die ich im Moment nicht habe.

Vielleicht kann ich helfen.

Wie kann ich mit Beispielen helfen?

  • Beispiele mit mehr async / await , weniger mit Rückrufen
  • Konkretere Beispiele aus der Praxis, weniger foo / bar
  • Dinge, die den "Sweet Spot" für Async zeigen – Dinge, die ohne die Bibliothek schwer zu tun sind
  • Beispiele für Node/JS-Neulinge, die zeigen, wie Parameter durchfließen
  • Umfangreichere Beispiele, die mehr Funktionen einzelner Methoden zeigen

Für die meisten Methoden gibt es @example Blöcke in den JSDoc-Kommentaren. Verrückt werden!

Beachten Sie für dieses spezielle Beispiel, dass Sie tun könnten

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))

oder wenn Sie ein Objekt als Ergebnis haben wollen

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)]))
)

Ich suche insbesondere ein (einfaches) Promise-basiertes Beispiel für async.mapLimit, auch ohne async/await. Habe bisher kein Beispiel ohne Rückruf gefunden.

@flatcoding https://github.com/caub/misc/blob/master/utils/promise-concurrent.js , wenn Sie await nicht wollen, können Sie es durch eine rekursive Funktion ersetzen

Hallo Cyril @caub ,
Danke für deine Antwort. Ich bin nicht besonders gegen 'wait', sondern um 'gute Beispiele' für das 'async'-Modul willen, mit dem ich beginnen möchte und eine Implementierung mit grundlegender Promise-Behandlung sehen möchte, einschließlich .then .catch.
Ich habe ehrlich gesagt Schwierigkeiten, asynchron mit Promises im Allgemeinen zu verwenden, also möchte ich vor der Verwendung von async/await einfach mit Schritt 1) ​​beginnen ...
Übrigens, danke für das Teilen Ihres Beispiels, ich bin mir jedoch nicht ganz sicher, wie es sich auf das asynchrone Modul bezieht.

Ich dachte mit "einfaches, auf Versprechen basierendes Beispiel", du meinst ein Beispiel ohne Bibliothek

Wenn Sie ein Beispiel mit dieser Bibliothek haben möchten, gibt es sicher viele

Richtig, ich komme im Allgemeinen gut mit der Verwendung von Promises aus und verstehe auch, wie man die 'async'-Module im Callback-Stil verwendet. Wie in der Dokumentation angegeben, würde es ohne bereitgestellte Rückrufe ein Versprechen zurückgeben. Bisher konnte ich keine guten Beispiele finden, zumindest nicht für async.map(Limit). Da es in diesem Thread um 'bessere Beispiele' in der Dokumentation geht, habe ich mich hier darauf eingelassen ...
Und wie gesagt, ich konnte es auch mit einem Versprechen nicht wirklich zum Laufen bringen, habe sogar ein Problem damit angesprochen.

Hallo @caub , habe

@romanbalayan nett

die Methoden, die wir am häufigsten verwenden, sind async.parallel und async.auto , planen Sie diese auch zu behandeln?

Hinweis: Ich denke, Sie könnten das asynchrone IIFE (async ()=>{ in async/await-Beispielen vermeiden, um die Dinge leichter zu machen

@caub , aktualisierte Pull-Anfrage zum Entfernen von IIFE. (Hatte es verwendet, um lokal zu testen, ob die Samples tatsächlich funktionierten)

Ja, ich möchte demnächst auch auf die Flusskontrolle eingehen. Ich habe eigentlich nur auf Feedback gewartet, ob die Änderungen, die ich an den Sammlungsbeispielen vorgenommen habe, den Erwartungen hier entsprechen.

@romanbalayan Was Sie tun könnten, ist, diesen PR-Zweig als Github-Seite einzurichten (gehen Sie in Ihre Abzweigung von Async, Einstellungen > Github-Seiten > Quelle: (wählen Sie Ihren PR-Zweig aus)), damit wir ihn in http://romanbalayan.github in der Vorschau

@caub , tolle Idee. Habe das gemacht und sollte jetzt auf https://romanbalayan.github.io/async/v3/ verfügbar sein.

Hallo @caub ,

Promise- und async/await-Beispiele für Ablaufsteuerungsmethoden hinzugefügt - async.parallel , async.series und async.auto

@romanbalayan schön! https://romanbalayan.github.io/async/v3/docs.html#auto

Ich habe das Gefühl, dass die Callback- und Promise-Beispiele immer ziemlich ähnlich sind, wahrscheinlich lohnt es sich, nur eines davon zu haben, da wir bei der Verwendung von Promises sowieso lieber asynchron / warten, und es würde die Dinge aufhellen

Gutes Zeug sonst!

@caub

Sollte ich auch das Verwendungsbeispiel Promises für die Collections-Methoden entfernen?

Ich denke ja du könntest

Auch für die Flusssteuerungsmethoden könnten Sie Beispiele mit asynchronen inneren Funktionen hinzufügen, Beispiel:

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 tolle Arbeit. Ich wünschte, ich hätte Ihre Version der Dokumentation vor einigen Tagen gefunden! Ich habe zwar durch Versuch und Irrtum herausgefunden, wie es funktioniert, aber mit den neuen Beispielen wäre es weniger schmerzhaft gewesen :-)
Ich bin mir immer noch nicht 100% sicher, wie nützlich einige der asynchronen Methoden sind, jetzt, da wir async/await und Promise.all sowie Promise.allSettled haben . (?)

const results = await async.parallel({
    one: async () => delay(200, 1),
    two: async () => delay(100, 2),
});

wäre nativ geschrieben:

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()])
  )
);
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen