Async: لم يتم حل q.push المنتظر عندما يرمي عامل قائمة الانتظار خطأ

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

await q.push(task) غير آمن للاستخدام في الوقت الحالي لأن الوعد الذي قدمه q.push لا يتم حله أو رفضه أبدًا إذا ألقى عامل قائمة الانتظار خطأ. أفهم أن await q.push(task) لا يمكن أن يخطئ بسبب التوافق مع الإصدارات السابقة لهذه الطريقة ومعلمة رد الاتصال الاختيارية (ميزة الدفع والنسيان). طريقة q.asyncPush(task) التي ترفض وعدها لا يجب أن تكون مجدية؟

يمكنك إظهار مشكلة هذا الرمز (في العقدة أو المتصفح دون الحاجة):

const async = require('async');
let pushResult;

(async () => {
    const q = async.queue(async (task) => {
        throw new Error('Bad thing');
    });

    try {
        pushResult = q.push({some: 'data'});
        await pushResult;
        console.log('Error not catched');
    } catch (e) {
        console.log('Error catched');
    }
})();

setTimeout(() => {
    console.log('exit');
    console.log(pushResult);
}, 1000);

_تم نشره في الأصل بواسطة https://github.com/caolan/async/pull/1641#issuecomment -498191809_

bug feedback-wanted

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

تعجبني فكرة asyncPush .

ال 6 كومينتر

أفكر في إجراء حل q.push() باستخدام كائن الخطأ. هل سيكون ذلك كافيا؟ لا أريد حقًا منح unhandledRejection s للغالبية العظمى من مستخدمي queue .

قد يكون الحل مع وجود خطأ خيارًا ولكنك ستحتاج إلى اختبار عائد q.push ، فهو ليس نمطًا تقليديًا وعدًا (لا يوجد try / catch / finally block أو .then() / .catch() يمكن استخدامها مع). الرفض المباشر ليس خيارًا ، وأنا أتفق معه ، إنه تعديل رئيسي. بالنسبة لي ، هناك احتمالان آخران:

  • طريقة مميزة q.asyncPush ترجع وعدًا يمكن أن يرفضه. ربما تكون الطريقة الأسهل والأكثر وضوحًا لأنه يمكن فصل واجهات برمجة التطبيقات (APIs) الواعدة ومعاودة الاتصال بشكل كامل.
  • قيمة منطقية كمعامل ثاني q.push لتفعيل الوعود المرفوضة.

الشيء المهم حقًا هو أن الوعود لن تظل معلقة إلى الأبد ، لذا يمكنك تحديد الخيار الأفضل الذي تعتقده ؛-)

تعجبني فكرة asyncPush .

شكرا جزيلا !

aearly هل تم تنفيذ هذا على الإطلاق؟

كان كذلك ، راجع https://caolan.github.io/async/v3/docs.html#QueueObject : pushAsync

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