Disons que nous utilisons async.map ou vraiment presque tous les utilitaires asynchrones
Ma question/demande de fonctionnalité est la suivante : si le tableau/ensemble de tâches est vide, async déclenche-t-il le rappel final au prochain tick ? Sinon, existe-t-il un moyen de dire à async de le faire? Ce serait une fonctionnalité intéressante.
Sinon, j'en ai beaucoup dans mon code, qui est plus verbeux :
async.map([], function(item,cb){
}, function final(err, results){
process.next(function(){
cb(err,results);
});
});
pour éviter Zalgo, ceci ci-dessus est nécessaire, mais, c'est beaucoup plus agréable à faire :
async.map([], function(item,cb){
}, cb);
Je suppose qu'une chose que nous pourrions est de vérifier si le tableau est vide, et si c'est le cas, revenez tôt avec
if(![].length){
return process.next(cb);
}
qu'est-ce que vous recommandez?
Salut @ORESoftware , merci pour la question ! Pour un tableau/ensemble vide, async
invoque le rappel final sur le même tick car les reports intégrés ont été supprimés dans v2.0.0
pour des raisons de performances (je ne pense pas que async < v2.0.0
avait même un report intégré pour ce cas).
Une solution simple consiste à envelopper async.map
dans async.ensureAsync
:
async.ensureAsync(async.map)([], function(item, cb) {
}, cb);
ou quelque part au début de votre code :
const asyncMap = async.ensureAsync(async.map);
// then call `asyncMap` just as you would `async.map`
Sinon, l'approche process.nextTick
vous avez proposée est parfaitement valable. Cependant, si vous écrivez du code qui pourrait être utilisé dans un navigateur, vous devriez jeter un œil à async.setImmediate
ou async.nextTick
.
Oui, @hargasinski l' a sur l'argent. Nous ne vous protégeons pas de Zalgo pour des raisons de performances.
Une simplification que vous pouvez faire est :
function final(err, results){
process.nextTick(cb, err, results);
}
async.nextTick
/ async.setImmediate
/ process.nextTick
/ setImmediate
tout vous permet de passer des arguments qui seront passés à la fonction.
Oh sympa, je ne connaissais pas ça à propos de process.nextTick, etc, c'est génial
Commentaire le plus utile
Oui, @hargasinski l' a sur l'argent. Nous ne vous protégeons pas de Zalgo pour des raisons de performances.
Une simplification que vous pouvez faire est :
async.nextTick
/async.setImmediate
/process.nextTick
/setImmediate
tout vous permet de passer des arguments qui seront passés à la fonction.