لنفترض أننا نستخدم خريطة غير متزامنة أو تقريبًا أيًا من الأدوات المساعدة غير المتزامنة
سؤالي / طلب الميزة هو - إذا كانت مصفوفة / مجموعة المهام فارغة ، فهل يطلق غير المتزامن رد الاتصال النهائي على العلامة التالية؟ إذا لم يكن الأمر كذلك ، فهل هناك طريقة لإخبار غير المتزامن بفعل ذلك؟ ستكون ميزة جميلة.
بخلاف ذلك ، لدي الكثير من هذا في الكود الخاص بي ، وهو أكثر تفصيلاً:
async.map([], function(item,cb){
}, function final(err, results){
process.next(function(){
cb(err,results);
});
});
لتجنب Zalgo ، هذا ضروري ، ولكن من الأفضل القيام بما يلي:
async.map([], function(item,cb){
}, cb);
أعتقد أن هناك شيئًا واحدًا يمكننا التحقق مما إذا كانت المصفوفة فارغة ، وإذا كان الأمر كذلك ، فارجع مبكرًا باستخدام
if(![].length){
return process.next(cb);
}
ماذا تنصحون؟
مرحبًا ORESoftware ، شكرًا على السؤال! بالنسبة إلى مصفوفة / مجموعة فارغة ، يستدعي async
رد الاتصال النهائي على نفس العلامة حيث تمت إزالة التأجيلات المضمنة في v2.0.0
لأسباب تتعلق بالأداء (لا أعتقد أن async < v2.0.0
حتى أنه كان لديه إرجاء مدمج لهذه الحالة على الرغم من).
حل بسيط هو التفاف async.map
async.ensureAsync
:
async.ensureAsync(async.map)([], function(item, cb) {
}, cb);
أو في مكان ما في بداية التعليمات البرمجية الخاصة بك:
const asyncMap = async.ensureAsync(async.map);
// then call `asyncMap` just as you would `async.map`
خلاف ذلك ، فإن طريقة process.nextTick
التي اقترحتها صحيحة تمامًا. على الرغم من أنك إذا كنت تكتب رمزًا قد يتم استخدامه في المتصفح ، فيجب عليك إلقاء نظرة على async.setImmediate
أو async.nextTick
.
نعم ، hargasinski لديه المال. نحن لا نحميك من Zalgo لأسباب تتعلق بالأداء.
أحد التبسيط الذي يمكنك القيام به هو:
function final(err, results){
process.nextTick(cb, err, results);
}
async.nextTick
/ async.setImmediate
/ process.nextTick
/ setImmediate
كلها تتيح لك تمرير args التي سيتم تمريرها إلى الوظيفة.
أوه لطيف ، لم أكن أعرف ذلك عن process.nextTick ، إلخ ، هذا رائع
التعليق الأكثر فائدة
نعم ، hargasinski لديه المال. نحن لا نحميك من Zalgo لأسباب تتعلق بالأداء.
أحد التبسيط الذي يمكنك القيام به هو:
async.nextTick
/async.setImmediate
/process.nextTick
/setImmediate
كلها تتيح لك تمرير args التي سيتم تمريرها إلى الوظيفة.