Pouvez-vous utiliser async wait dans la fonction async.series ?
J'ai fait quelques expériences simples, mais elles n'ont pas fonctionné comme prévu.
Oui, vous pouvez! Mais au lieu d'utiliser un rappel, retournez simplement une valeur ou lancez une erreur. http://caolan.github.io/async/global.html
D'accord - s'il vous plaît pardonnez-moi Si j'ai mal compris quelque chose Vous aimez ça ?
const result = await async.each(openFiles, async (file) => {
try: {
await asyncOperation(file);
return null
} catch(err) {
return err
}
})
Étant donné que les fonctions async
convertissent automatiquement les erreurs en rejets, à moins que vous ne vouliez faire quelque chose de spécial avec l'erreur, votre exemple pourrait être réduit à :
const result = await async.each(openFiles, async (file) => {
await asyncOperation(file);
})
Merci pour l'extrait amélioré. Cela semble fonctionner dans un scénario simple, mais dans le cadre suivant, je ne parviens pas à le faire fonctionner :
for (const tasks of fileTasks) {
const result = await async.each(tasks, async (file) => {
await asyncOperation(file);
})
}
J'avais compris que la boucle for-of permettrait des opérations asynchrones?
Puisque async.each
ne renvoie pas de promesse, vous ne pouvez pas la await
.
Ah d'accord. Donc, l'utilisation de l'option for-of async/await n'est pas un bon modèle avec async. Faites-vous maintenant si c'est sur la feuille de route pour l'async ?
Il y a une science folle prévue. 😉
Ou util.promisify()
😉
(ou pify()
)
Pourquoi cela passe-t-il d'une question sur async.series
à 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 pourriez-vous s'il vous plaît me dire quelle version extracly prend en charge async/wait ?
J'utilise caolan/async version 2.6.0
Commentaire le plus utile
Il y a une science folle prévue. 😉