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.
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
Hilfreichster Kommentar
Es ist eine verrückte Wissenschaft geplant. 😉