Angenommen, wir verwenden async.map oder wirklich fast jedes der async-Dienstprogramme
Meine Frage/Funktionsanforderung lautet: Wenn das Aufgaben-Array/der Aufgaben-Satz leer ist, löst Async den letzten Rückruf beim nächsten Tick aus? Wenn nicht, gibt es eine Möglichkeit, async anzuweisen, dies zu tun? Wäre ein nettes Feature.
Ansonsten habe ich viel davon in meinem Code, der ausführlicher ist:
async.map([], function(item,cb){
}, function final(err, results){
process.next(function(){
cb(err,results);
});
});
Um Zalgo zu vermeiden, ist dies oben notwendig, aber es ist viel schöner:
async.map([], function(item,cb){
}, cb);
Ich denke, wir könnten überprüfen, ob das Array leer ist, und wenn ja, kehren Sie früh mit zurück
if(![].length){
return process.next(cb);
}
was könnt ihr empfehlen?
Hey @ORESoftware , danke für die Frage! Bei einem leeren Array/Satz ruft async
den letzten Callback im selben Tick auf, da eingebaute Verzögerungen in v2.0.0
aus Leistungsgründen entfernt wurden (ich glaube nicht, dass async < v2.0.0
hatte für diesen Fall sogar einen eingebauten Aufschub).
Eine einfache Problemumgehung besteht darin, async.map
in async.ensureAsync
:
async.ensureAsync(async.map)([], function(item, cb) {
}, cb);
oder irgendwo am Anfang deines Codes:
const asyncMap = async.ensureAsync(async.map);
// then call `asyncMap` just as you would `async.map`
Ansonsten ist der process.nextTick
Ihnen vorgeschlagene async.setImmediate
oder async.nextTick
ansehen.
Ja ,
Eine Vereinfachung, die Sie tun können, ist:
function final(err, results){
process.nextTick(cb, err, results);
}
async.nextTick
/ async.setImmediate
/ process.nextTick
/ setImmediate
können Sie Argumente übergeben, die an die Funktion übergeben werden.
Oh schön, das wusste ich nicht über process.nextTick usw., das ist der Hammer
Hilfreichster Kommentar
Ja ,
Eine Vereinfachung, die Sie tun können, ist:
async.nextTick
/async.setImmediate
/process.nextTick
/setImmediate
können Sie Argumente übergeben, die an die Funktion übergeben werden.