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
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?
async
/ await
, weniger mit Rückrufenfoo
/ bar
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()])
)
);
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.