Async: wie man Async mit async/await zum Laufen bringt

Erstellt am 14. Feb. 2019  ·  10Kommentare  ·  Quelle: caolan/async

var async = require('async');

var workPool = async.queue(async (task, taskComplete)=>{
  console.log(1, taskComplete);

  async.retry(3, async (retryComplete)=>{

    console.log(2, retryComplete);
    // retryComplete(null, task);

  });
});

workPool.push("test");

Ich frage mich, warum ich dieses Ergebnis habe:

$ node test.js
1 undefined
2 undefined
question

Hilfreichster Kommentar

@pawelotto Ich denke, dafür können Sie den Knoten promisify util verwenden, den ich nicht getestet habe, aber da die Signatur der

Das obige Beispiel wird also (ohne Behandlungsfehler):

import async from "async"
import {promisify} from "util"

const promiseMapLimit = promisify(async.mapLimit)
const results = await promiseMapLimit(files, async file => { // <- no callback!
    const text = await util.promisify(fs.readFile)(dir + file, 'utf8')
    const body = JSON.parse(text) // <- a parse error herre will be caught automatically
    if (!(await checkValidity(body))) {
        throw new Error(`${file} has invalid contents`) // <- this error will also be caught
    }
    return body // <- return a value!
})

Alle 10 Kommentare

https://caolan.github.io/async/

Async akzeptiert Async-Funktionen überall dort, wo wir eine Rückruffunktion im Node-Stil akzeptieren. Wir übergeben ihnen jedoch keinen Rückruf, sondern verwenden stattdessen den Rückgabewert und behandeln alle Ablehnungen von Zusagen oder geworfenen Fehlern.

async.mapLimit(files, async file => { // <- no callback!
    const text = await util.promisify(fs.readFile)(dir + file, 'utf8')
    const body = JSON.parse(text) // <- a parse error herre will be caught automatically
    if (!(await checkValidity(body))) {
        throw new Error(`${file} has invalid contents`) // <- this error will also be caught
    }
    return body // <- return a value!
}, (err, contents) => {
    if (err) throw err
    console.log(contents)
})

Ja, Async übergibt keine Rückrufe an async -Funktionen – kehren Sie einfach zurück, wenn die Aufgabe abgeschlossen ist.

Und was ist mit der Rückgabe von Werten aus der letzten Callback-Funktion (anstatt sie wie in diesem Beispiel in der Konsole zu protokollieren)?

In den meisten Fällen funktioniert es, nur return Werte aus async Funktionen einzufügen.

Welche async Funktion gibt genau einen Wert zurück? Nach dem, was ich überprüft habe, kehren sie ungültig zurück, z
machen bis

@pawelotto Ich denke, dafür können Sie den Knoten promisify util verwenden, den ich nicht getestet habe, aber da die Signatur der

Das obige Beispiel wird also (ohne Behandlungsfehler):

import async from "async"
import {promisify} from "util"

const promiseMapLimit = promisify(async.mapLimit)
const results = await promiseMapLimit(files, async file => { // <- no callback!
    const text = await util.promisify(fs.readFile)(dir + file, 'utf8')
    const body = JSON.parse(text) // <- a parse error herre will be caught automatically
    if (!(await checkValidity(body))) {
        throw new Error(`${file} has invalid contents`) // <- this error will also be caught
    }
    return body // <- return a value!
})

Vielleicht kannst du Neo-Async ausprobieren

@kazaff cool, ich wusste es nicht, danke!

@kazaff- Legende!

@kazaff, wie man Neo-Async in der Antwort von b4dnewz verwendet, reulst einfach nicht zurückgeben

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen