मैंने इस विषय पर कई लेख पढ़े हैं, लेकिन यह मेरे लिए अभी भी स्पष्ट नहीं है कि क्या Promise.rejectत्रुटि को फेंकने के बीच अंतर है । उदाहरण के लिए,
Promise.reject का उपयोग करना
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
return Promise.reject(new PermissionDenied());
}
});
फेंक का उपयोग करना
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
throw new PermissionDenied();
}
});
मेरी प्राथमिकता throwसिर्फ इसलिए है क्योंकि यह छोटा है, लेकिन अगर कोई एक दूसरे के ऊपर कोई फायदा है तो सोच रहा था।
throwयह है कि अगर यह एक अतुल्यकालिक कॉलबैक, जैसे कि सेटटाइमआउट के भीतर से फेंका गया था, तो खारिज किए गए वादे का परिणाम नहीं होगा। jsfiddle.net/m07van33 @Blondie आपका उत्तर सही था।
rejectअपने परम सूची से इसे छोड़ देने की अनुमति देता है ।
.then()हैंडलर फेंका अपवाद पकड़ता है और एक को अस्वीकार कर दिया वादा में यह स्वचालित रूप से बदल जाता है। चूँकि मैंने पढ़ा है कि फेंके गए अपवादों को निष्पादित करने के लिए विशेष रूप से तेज़ नहीं हैं, इसलिए मुझे लगता है कि अस्वीकार किए गए वादे को पूरा करने के लिए निष्पादित करने के लिए थोड़ा तेज़ हो सकता है, लेकिन आपको कई आधुनिक ब्राउज़रों में एक परीक्षण तैयार करना होगा यदि यह जानना महत्वपूर्ण था। मैं व्यक्तिगत रूप से उपयोग करताthrowहूं क्योंकि मुझे पठनीयता पसंद है।