<p>async.auto والحالة الغريبة لمحاولة ... catch</p>

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

ما هو إصدار غير متزامن الذي تستخدمه؟
الإصدار 2.5.0
ما البيئة التي حدثت فيها المشكلة في (إصدار العقدة / إصدار المتصفح)
الإصدار 6.0.3
ما الذي فعلته؟

async.auto({
  returnOne: (callback) => callback(null, 1),
  tryCatch: ["returnOne", (results, callback) => {
    try {
      assert(results.returnOne === 1);
      return callback(null);
    } catch (err) {
      console.log(`Caught an error: ${err.message}`);
      return callback(err);
    }
  }],
}, (err, results) => {
  assert(results.returnOne !== 1);
  console.log(`All Done!`);
});

ماذا تتوقع أن يحدث؟
يفشل التأكيد الموجود داخل رد نداء aync.auto النهائي ويلقي خطأ لم يتم اكتشافه ويوقف عملية Node.js. في مثال العالم الحقيقي الخاص بي على هذا ، نقوم باختبار كتلة من التعليمات البرمجية داخل Mocha ، والتي تعالج الخطأ وتبلغ عن فشل الاختبار بمعلومات حول التأكيد الذي تسبب في الفشل.

ماذا كانت النتيجة الفعلية؟
حاول / Catch من الخطوة التلقائية السابقة اكتشاف الخطأ واستدعاء رد نداء tryCatch مرة ثانية ، مما يؤدي إلى خطأ مختلف:

async/dist/async.js:903
        if (fn === null) throw new Error("Callback was already called.");
                         ^
Error: Callback was already called.
question

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

try {
  //...
  return callback(null, result)
} catch (e) {
  //..
  return callback(e)
}

هو نموذج مضاد ضخم لأنه إذا تم طرح شيء ما لاحقًا في سلسلة رد الاتصال (مثل تأكيدك) ، فسيتم اكتشافه في كتلة try ، مما يتسبب في رد اتصال مزدوج في catch . طريقة صحيحة:

let err, result
try {
  result = doSomething()
} catch (e) {
  err = e
}
callback(err, result)

ال 3 كومينتر

try {
  //...
  return callback(null, result)
} catch (e) {
  //..
  return callback(e)
}

هو نموذج مضاد ضخم لأنه إذا تم طرح شيء ما لاحقًا في سلسلة رد الاتصال (مثل تأكيدك) ، فسيتم اكتشافه في كتلة try ، مما يتسبب في رد اتصال مزدوج في catch . طريقة صحيحة:

let err, result
try {
  result = doSomething()
} catch (e) {
  err = e
}
callback(err, result)

aearly من المنطقي ، شكرًا على النصيحة!

(مرحبًا أيضًا! 👋)

👋😊

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