لماذا يقوم catch بإرجاع كائن وليس كائن خطأ؟
هذه هي الطريقة التي يتم بها ذلك مع Angular's $ http ، والذي تستند إليه هذه المكتبة. إنها بشكل أو بآخر قطعة أثرية وليست بالضرورة الطريقة الصحيحة للقيام بالأشياء. أرغب في الانتقال إلى مسار خطأ أكثر اتساقًا حيث يتم استخدام Error
الذي يحتوي على تفاصيل استجابة مرفقة إذا كان ذلك مناسبًا.
function createError(message, details) {
var err = new Error(message);
Object.keys(details, function (key) {
err[key] = details[key];
});
return err;
}
createError('timeout of ' + config.timeout + 'ms exceeded', {
code: 'ECONNABORTED',
config: config
});
أود أيضًا تغيير lib لرفض Promise
عند حدوث خطأ فعلي ، بغض النظر عن رمز حالة HTTP. بينما الآن يتم رفض أي شيء خارج النطاق 200-300.
تضمين التغريدة
يمكنك أيضًا التفكير في استخدام علامة التكوين لتحديد الإجراء الذي يجب اتخاذه عند إرجاع استجابة غير 2xx / 3xx.
يستخدم request-promise
lib الخيار / العلم simple
لهذا الغرض. عندما يكون simple
هو true
، يتم رفض طلب الوعد على أخطاء خارج الشبكة (2xx ، 3xx). عندما تكون العلامة خاطئة ، فإنها لا ترفض أي شيء وتصبح مسؤولية المستخدم. لقد وجدت أن هذا مفيد جدًا ولديه تطبيقات تستخدم كلا الإعدادين. أعتقد أنه عادةً ما يكون لدي تعيين بسيط على true
لأنه بشكل عام IMO افتراضي أفضل.
https://github.com/request/request-promise#get -a-rejection-only-if-the-request-failed-for-Technical-reason
إغلاق كنسخة مكررة من رقم 24
التعليق الأكثر فائدة
هذه هي الطريقة التي يتم بها ذلك مع Angular's $ http ، والذي تستند إليه هذه المكتبة. إنها بشكل أو بآخر قطعة أثرية وليست بالضرورة الطريقة الصحيحة للقيام بالأشياء. أرغب في الانتقال إلى مسار خطأ أكثر اتساقًا حيث يتم استخدام
Error
الذي يحتوي على تفاصيل استجابة مرفقة إذا كان ذلك مناسبًا.أود أيضًا تغيير lib لرفض
Promise
عند حدوث خطأ فعلي ، بغض النظر عن رمز حالة HTTP. بينما الآن يتم رفض أي شيء خارج النطاق 200-300.