Async: Die Verwendung einer AsyncFunction als Iteratee-Funktion führt dazu, dass Iteratee als undefiniert übergeben wird

Erstellt am 26. Sept. 2017  ·  4Kommentare  ·  Quelle: caolan/async

Welche Version von Async verwendest du?
2.5.0

In welcher Umgebung trat das Problem auf (Knotenversion/Browserversion)
Betriebssystemversion: OS X 10.12.6
Knotenversion: 8.4.0
Browserversion: N/A

Was hast du gemacht?

// templateNames is an array of strings
async.map(templateNames, async (templateName, next) => {   
  let template;
  try {
    template = await utils.getFile(templateName);
  } catch(err) {
    next(err);
  }
...
// and so on

Was haben Sie erwartet?
next ist eine Iterationsfunktion

Was war das tatsächliche Ergebnis?
next ist undefined


Am Ende habe ich nur die .then().catch() Syntax verwendet, um mein Ziel zu erreichen, wollte dies aber trotzdem mit einem AsyncFunction teilen ( HINWEIS: Dies ist nicht die async Definition, sondern die native AsyncFunction Object ) führt dazu, dass der Iterierte ( next ) vom Typ undefined .

docs question

Hilfreichster Kommentar

async Funktionen werden ab 2.3.0 anders behandelt -- es wird kein Callback übergeben. Geben Sie stattdessen einfach einen Wert (oder ein Versprechen) zurück. In Ihrem Beispiel ist sogar try / catch nicht erforderlich, da alle ausgegebenen Fehler von Async abgefangen werden. Dies sollte Ihren Code ein wenig vereinfachen.

// templateNames is an array of strings
async.map(templateNames, async templateName => {   
  const template = await utils.getFile(templateName);
...
// and so on

AsyncFunction Dokumente: http://caolan.github.io/async/global.html

Alle 4 Kommentare

async Funktionen werden ab 2.3.0 anders behandelt -- es wird kein Callback übergeben. Geben Sie stattdessen einfach einen Wert (oder ein Versprechen) zurück. In Ihrem Beispiel ist sogar try / catch nicht erforderlich, da alle ausgegebenen Fehler von Async abgefangen werden. Dies sollte Ihren Code ein wenig vereinfachen.

// templateNames is an array of strings
async.map(templateNames, async templateName => {   
  const template = await utils.getFile(templateName);
...
// and so on

AsyncFunction Dokumente: http://caolan.github.io/async/global.html

🤦‍♂️ Es wäre klug gewesen, diesen Teil der Dokumente klarer zu lesen. Vielen Dank.

Um fair zu sein, diese Beschreibung ist auf der Docs-Site nicht so offensichtlich ... 📜

Ich finde es eigentlich ziemlich klar. Ich habe zunächst die Dokumente durchgesehen und diesen Teil übersehen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen