التعامل مع الاستثناءات غير المتزامنة مع وعود بلوبيرد
س: كيفية التعامل مع الاستثناءات غير المعالجة في عمليات الاسترجاعات غير المتزامنة مع وعود بلوبيرد؟
لا تلتقط وعود بلوبيرد بطبيعتها الاستثناءات التي يتم طرحها من عمليات الاسترجاعات غير المتزامنة، على عكس المجالات.أ: استخدم مُنشئي الوعد أو بعد ذلك () عمليات الإغلاق للتعامل مع الاستثناءات
للقبض على الاستثناءات في عمليات رد الاتصال غير المتزامنة، قم بلف رد الاتصال في مُنشئ الوعد أو بعد ذلك( ) الإغلاق:وظيفة getPromise(){ إرجاع وعد جديد (وظيفة (تم، رفض) { setTimeout(وظيفة(){ رمي خطأ جديد("AJAJAJA"); }، 500)؛ }).ثم (وظيفة () { console.log("hihihihi"); رمي خطأ جديد ("أوه لا!")؛ });function getPromise(){
return new Promise(function(done, reject){
setTimeout(function(){
throw new Error("AJAJAJA");
}, 500);
}).then(function() {
console.log("hihihihi");
throw new Error("Oh no!");
});
}
تجنب طرح عمليات رد الاتصال غير المتزامنة المخصصة لا تقم مطلقًا برمي الاستثناءات مباشرة في عمليات رد الاتصال المخصصة غير المتزامنة (خارج عمليات رد الاتصال الوعدية). بدلًا من ذلك، ارفض الوعد المحيط:
function getPromise(){ إرجاع وعد جديد (وظيفة (تم، رفض) { setTimeout(done, 500); }).ثم (وظيفة () { console.log("hihihihi"); رفض(خطأ جديد("أوه لا!")); });
function getPromise(){
return new Promise(function(done, reject){
setTimeout(done, 500);
}).then(function() {
console.log("hihihihi");
reject(new Error("Oh no!"));
});
}
استخدام مُنشئ الوعد:
var p = getPromise(); ص.ثم(وظيفة(){ console.log("ياي"); }).خطأ(وظيفة(ه){ console.log("مرفوض"،e); }).catch(خطأ، وظيفة (ه) { console.log("خطأ"،e); }).catch(وظيفة(ه){ console.log("غير معروف"، e); });
var p = getPromise();
p.then(function(){
console.log("Yay");
}).error(function(e){
console.log("Rejected",e);
}).catch(Error, function(e){
console.log("Error",e);
}).catch(function(e){
console.log("Unknown", e);
});
خطأ [خطأ: أوه لا!]يضمن هذا الأسلوب اكتشاف الاستثناءات ومعالجتها بشكل مناسب، مما يمنع التطبيق من التعطل. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3