Async: يحتاج التوثيق إلى أمثلة أفضل

تم إنشاؤها على ١٤ يناير ٢٠١٩  ·  21تعليقات  ·  مصدر: caolan/async

ضع في اعتبارك هذا المثال للخريطة

async.map(['file1','file2','file3'], fs.stat, function(err, results) {
    // results is now an array of stats for each file
});

هذا لا يخبرني بشيء سوى بناء الجملة. في معظم الحالات ، لن يجتاز الأشخاص fs.stat . يجب أن تتضمن الأمثلة استخدام جميع الخيارات الممكنة. يجب تحديث جميع الأمثلة لجميع الوظائف والأساليب. هم مفرط في التبسيط

docs help wanted

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

أوافق ، نحن بحاجة إلى مستندات أفضل بكثير. أود أيضًا تغيير العديد من الأمثلة (أو إضافة أمثلة mroe) لاستخدام عدم التزامن / انتظار. ومع ذلك ، هذا شيء يستغرق وقتًا ليس لدي في الوقت الحالي.

ال 21 كومينتر

أوافق ، نحن بحاجة إلى مستندات أفضل بكثير. أود أيضًا تغيير العديد من الأمثلة (أو إضافة أمثلة mroe) لاستخدام عدم التزامن / انتظار. ومع ذلك ، هذا شيء يستغرق وقتًا ليس لدي في الوقت الحالي.

ربما استطيع المساعدة.

كيف يمكنني المساعدة بأمثلة؟

  • أمثلة مع المزيد من async / await ، أقل مع عمليات رد النداء
  • المزيد من الأمثلة الملموسة من تطبيقات العالم الحقيقي ، أقل من foo / bar
  • الأشياء التي تُظهر "المكان الجميل" لـ Async - أشياء يصعب القيام بها بدون المكتبة
  • أمثلة يمكن الوصول إليها من قبل الوافدين الجدد إلى Node / JS التي توضح كيفية تدفق المعلمات
  • أمثلة أكثر شمولاً تظهر المزيد من ميزات الأساليب الفردية

هناك كتل @example في تعليقات JSDoc لمعظم الطرق. اذهب المكسرات!

ملاحظة لهذا المثال بالذات ، يمكنك القيام به

await async.map(['file1','file2','file3'], fs.promises.stat);
// or without async lib
await Promise.all(['file1','file2','file3'].map(name => fs.promises.stat(name))

أو إذا كنت تريد كائنًا نتيجة لذلك

await async.auto({
  file1: async()=>fs.promises.stat('file1'),
  file2: async()=>fs.promises.stat('file2')
  file3: async()=>fs.promises.stat('file3')
})
// or without async lib
Object.fromEntries(
  await Promise.all(['file1','file2','file3'].map(async name => [name, await fs.promises.stat(name)]))
)

أنا على وجه الخصوص أبحث عن مثال (بسيط) قائم على الوعد لـ async.mapLimit ، حتى بدون عدم التزامن / الانتظار. لم يتم العثور على أي مثال بخلاف رد الاتصال على الإطلاق.

flatcoding https://github.com/caub/misc/blob/master/utils/promise-concurrent.js ، إذا كنت لا تريد await ، يمكنك استبدالها بوظيفة تكرارية

مرحبًا Cyrilcaub ،
شكرا لردك. أنا لا أعارض كلمة "انتظار" بشكل خاص ، بل من أجل "أمثلة جيدة" للوحدة "غير المتزامنة" التي أود أن أبدأ بها وأرى تنفيذًا بمعالجة الوعد الأساسية ، بما في ذلك .catch.
أنا بصراحة أعاني من استخدام غير متزامن مع الوعود بشكل عام ، لذا قبل استخدام غير المتزامن / انتظار ، أود فقط أن أبدأ بالخطوة 1) ...
راجع للشغل ، شكرًا لمشاركتك مثالك ، لست متأكدًا تمامًا من كيفية ارتباطه بالوحدة غير المتزامنة.

فكرت في "مثال بسيط قائم على الوعد" ، فأنت تقصد مثالًا بدون أي مكتبة

إذا كنت تريد مثالاً مع هذه المكتبة ، فأنا متأكد من أن هناك الكثير

حسنًا ، حسنًا ، أنا على ما يرام بشكل عام باستخدام الوعود ، كما أنني أفهم كيفية استخدام الوحدات النمطية "غير المتزامن" في نمط رد الاتصال. كما تنص الوثائق ، بدون الاسترجاعات المقدمة فإنه سيعيد الوعد. حتى الآن ، لا يمكنني تحسين الأمثلة ، ليس لخريطة غير متزامنة (حد) على الأقل. نظرًا لأن هذا الموضوع يدور حول "أمثلة أفضل" في التوثيق ، فقد شاركت في هذا هنا ...
وكما قيل ، لم أتمكن حقًا من الحصول على وعد وتنفيذ وعد ، حتى أنني أثارت مشكلة في ذلك.

مرحبًا caub ، أخذ لقطة في تحسين المستندات لطرق التجميع ، وإضافة حالات استخدام لعمليات الاسترجاعات والوعود وعدم التزامن / انتظار.

تضمين التغريدة

أكثر الطرق التي نستخدمها هي async.parallel و async.auto ، هل تخطط لتغطية هذه الطرق أيضًا؟

ملاحظة: أعتقد أنه يمكنك تجنب IIFE (async ()=>{ المتزامن في أمثلة غير متزامنة / انتظار ، لجعل الأشياء أخف

caub ، طلب سحب محدث لإزالة IIFE. (تم استخدامه للاختبار محليًا إذا كانت العينات تعمل بالفعل)

نعم ، أود أيضًا تغطية التحكم في التدفق قريبًا. كنت في الواقع في انتظار تلقي التعليقات إذا كانت التغييرات التي أجريتها على أمثلة المجموعة تطابق التوقعات هنا.

romanbalayan ، ما يمكنك فعله هو إعداد فرع العلاقات العامة كصفحة جيثب (انتقل إلى مفترق غير متزامن ، الإعدادات> صفحات جيثب> المصدر: (اختر فرع العلاقات العامة الخاص بك)) حتى نتمكن من معاينته في http: //romanbalayan.github .io / غير متزامن / v3 /

caub ، فكرة رائعة. فعلت ذلك ، ويجب أن تكون متاحة الآن على https://romanbalayan.github.io/async/v3/

مرحبًا caub ،

تمت إضافة الوعد وعينات غير متزامن / انتظار لأساليب التحكم في التدفق - async.parallel ، async.series ، و async.auto

تضمين التغريدة https://romanbalayan.github.io/async/v3/docs.html#auto

أشعر أن أمثلة رد الاتصال والوعود دائمًا ما تكون متشابهة تمامًا ، وربما تستحق الحصول على واحدة منها فقط ، لأنه على أي حال عند استخدام الوعود ، فإننا نفضل الذهاب إلى عدم التزامن / الانتظار ، وسيؤدي ذلك إلى تفتيح الأشياء

أشياء جيدة أخرى!

تضمين التغريدة

هل يجب علي أيضًا إزالة مثال استخدام الوعود من طرق التحصيل أيضًا؟

أعتقد نعم يمكنك ذلك

أيضًا بالنسبة لطرق التحكم في التدفق ، يمكنك إضافة أمثلة بوظائف داخلية غير متزامنة ، على سبيل المثال:

const delay = (t, v) => new Promise(r => setTimeout(r, t, v));

try {
    console.time('parallel')
    const results = await async.parallel({
        one: async () => delay(200, 1),
        two: async () => delay(100, 2),
    });
    console.timeLog('parallel', results);
    // parallel: 200ms { one: 1, two: 2 }
}
catch (err) {
    console.log(err);
}

Romanbalayan عمل عظيم. أتمنى لو وجدت نسختك من الوثائق منذ بضعة أيام! لقد اكتشفت كيف تعمل الأشياء عن طريق التجربة والخطأ بعد كل شيء ، لكن سيكون الأمر أقل إيلامًا مع الأمثلة الجديدة :-)
ما زلت غير متأكد بنسبة 100٪ من فائدة بعض الطرق غير المتزامنة الآن بعد أن أصبح لدينا غير متزامن / انتظار و Promise.all بالإضافة إلى Promise.allSettled .. بشكل أساسي أتساءل عما إذا كان هناك معادلات أصلية لجميع الطرق في هذه المرحلة . (؟)

const results = await async.parallel({
    one: async () => delay(200, 1),
    two: async () => delay(100, 2),
});

ستكتب أصلاً:

const results = Object.fromEntries(
  await Promise.all(
    Object.entries({
      one: async () => delay(200, 1),
      two: async () => delay(100, 2),
    })
      .map(async ([k, v]) => [k, await v()])
  )
);
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات