Async: Können Sie async.series mit async/await verwenden?

Erstellt am 4. Nov. 2017  ·  11Kommentare  ·  Quelle: caolan/async

Können Sie async-await innerhalb der async.series-Funktion verwenden?

Ich habe ein paar einfache Experimente gemacht, aber sie haben nicht wie erwartet funktioniert.

docs question

Hilfreichster Kommentar

Es ist eine verrückte Wissenschaft geplant. 😉

Alle 11 Kommentare

Ja, du kannst! Aber anstatt einen Rückruf zu verwenden, geben Sie einfach einen Wert zurück oder geben Sie einen Fehler aus. http://caolan.github.io/async/global.html

Ok - bitte verzeiht mir, wenn ich etwas falsch verstanden habe 😄 So?

    const result = await async.each(openFiles, async (file) => {
        try: {
            await asyncOperation(file);
            return null
        } catch(err) {
            return err
        }
    })

Da async Funktionen Fehler automatisch in Ablehnungen umwandeln, es sei denn, Sie wollten etwas Besonderes mit dem Fehler machen, könnte Ihr Beispiel reduziert werden auf:

    const result = await async.each(openFiles, async (file) => {
        await asyncOperation(file);
    })

Vielen Dank für den verbesserten Ausschnitt. Es scheint in einem einfachen Szenario zu funktionieren, aber in der folgenden Einstellung kann ich es nicht zum Laufen bringen:

for (const tasks of fileTasks) {
    const result = await async.each(tasks, async (file) => {
        await asyncOperation(file);
    })
}

Ich war der Meinung, dass die for-of-Schleife asynchrone Operationen ermöglichen würde?

Da async.each kein Versprechen zurückgibt, können Sie es nicht await .

Ahh ok. Daher ist die Verwendung der for-of-async/await-Option kein gutes Muster mit async. Wissen Sie jetzt, ob dies auf der Roadmap für Async steht?

Es ist eine verrückte Wissenschaft geplant. 😉

Oder util.promisify()

(oder pify() )

Warum geht das von einer Frage zu async.series zu async.each ?

const _async = require('async');
const _ = require('lodash');

public doSomething = async(num) : Promise<any> => {
     return num*num + 1;
} 

public async getResults() {
    let results = new Array<any>();
    let tasks = [];

    try {
      const list = [1,2,3,4,5,6,7,8,9,10];

      list.forEach((item) => {
        tasks.push((callback) => {
          this.doSomething(item.then(
            (res) => {
              results.push(res);
              callback(null, res);
            }
          );
        })
      })

      results = await new Promise((resolve) => {
        _async.series(tasks, (err, res) => {
          console.log(res);
          if (err) {
            results.push(err);
          }
          resolve(results);
        })
      });
    } catch (err) {
      results.push(err.message);
      console.log(err);
    }

    return _.join(results, '\r\n');
  }



@aearly Hey fen könnten Sie mir bitte sagen, welche Extracly-Version async/await unterstützt?
Ich verwende caolan/async Version 2.6.0

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen