Async: الميزة / الدعم - مجموعة المهام الفارغة -> هل تم تشغيل رد الاتصال النهائي تلقائيًا في العلامة التالية؟

تم إنشاؤها على ١٣ أبريل ٢٠١٧  ·  3تعليقات  ·  مصدر: caolan/async

لنفترض أننا نستخدم خريطة غير متزامنة أو تقريبًا أيًا من الأدوات المساعدة غير المتزامنة

سؤالي / طلب الميزة هو - إذا كانت مصفوفة / مجموعة المهام فارغة ، فهل يطلق غير المتزامن رد الاتصال النهائي على العلامة التالية؟ إذا لم يكن الأمر كذلك ، فهل هناك طريقة لإخبار غير المتزامن بفعل ذلك؟ ستكون ميزة جميلة.
بخلاف ذلك ، لدي الكثير من هذا في الكود الخاص بي ، وهو أكثر تفصيلاً:

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);
}

ماذا تنصحون؟

question

التعليق الأكثر فائدة

نعم ، hargasinski لديه المال. نحن لا نحميك من Zalgo لأسباب تتعلق بالأداء.

أحد التبسيط الذي يمكنك القيام به هو:

function final(err, results){
    process.nextTick(cb, err, results);
}

async.nextTick / async.setImmediate / process.nextTick / setImmediate كلها تتيح لك تمرير args التي سيتم تمريرها إلى الوظيفة.

ال 3 كومينتر

مرحبًا 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 ، ​​إلخ ، هذا رائع

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات