2016-09-08 18 views
17

एक fetch कॉल क्रोम में विफल रहता है, तो केवल त्रुटि विवरण हैं कि मैं वापस आ गया हैमैं जावास्क्रिप्ट Fetch त्रुटियों को कैसे संभाल सकता हूं?

TypeError: Failed to fetch

मैं कैसे इस मामले में अंत उपयोगकर्ता के लिए एक जानकारीपूर्ण त्रुटि संदेश प्रदर्शित करते हैं?

विशेष रूप से:

यह क्यों लाना विफल बारे में कोई विवरण प्राप्त करने के लिए संभव है?

उदाहरण के लिए, यदि सर्वर क्रैश हो गया है, तो क्रोम DevTools नेट का एक कंसोल संदेश लॉग कर सकता है: ERR_EMPTY_RESPONSE, लेकिन जावास्क्रिप्ट से इसका उपयोग करने का कोई तरीका नहीं है।

जहां तक ​​मैं कह सकता हूं, जवाब नहीं है; मुझे लगता है कि यह सुरक्षा कारणों से है, दुर्भावनापूर्ण जेएस को यह पता लगाने से बचने के लिए कि कौन सी साइटें हैं और त्रुटि संदेशों का निरीक्षण करके पहुंच योग्य नहीं हैं।

क्या अन्य TypeError से fetch त्रुटियों को अलग करना संभव है?

यदि मुझे त्रुटि विवरण नहीं मिल पा रहे हैं, तो मैं कम से कम अस्पष्ट "वेब साइट तक पहुंचने में विफल" के साथ "असफल होने में विफल" को प्रतिस्थापित करना चाहता हूं; कृपया बाद में पुनः प्रयास करें "और मैं अन्य TypeError एस के लिए उस संदेश को प्रदर्शित करने के किसी भी जोखिम के बिना ऐसा करना पसंद है।

मुझे मिला एकमात्र समाधान वास्तविक message को यह देखने के लिए है कि यह "Failed to fetch" है या नहीं। यह स्पष्ट रूप से ब्राउज़र-विशिष्ट है; यह क्रोम में काम करता है, ऐसा लगता है कि यह क्रोम की किसी भी उपयोगकर्ता भाषा में काम करेगा, और अन्य ब्राउज़रों को अपने परीक्षण और हैंडलिंग की आवश्यकता होगी।

+5

'TypeError' की तरह लगता है ... वास्तव में गलत त्रुटि प्रकार। अजीब। –

+0

'.catch' आपके लिए काम नहीं करता है? –

+0

@ जारोमांडाएक्स - '.catch' काम करता है, लेकिन यदि संभव हो तो मैं त्रुटि विवरण प्राप्त करना चाहता हूं (मेरा पहला प्रश्न), और अन्य' टाइप एरर 'को त्रुटिपूर्ण त्रुटियों के रूप में गलत तरीके से पकड़ने से बचने के लिए, मुझे लगता है कि मुझे या तो इसे रखना है '.catch' _very_' fetch' के करीब (इसलिए कोई अन्य त्रुटियां नहीं हो सकती हैं, इस प्रकार मैं अपने वादों को कैसे ढूढ़ता हूं में लचीलापन खो देता हूं) या ब्राउज़र-विशिष्ट व्यवहार पर भरोसा करता हूं जैसे कि 'संदेश' (मेरा दूसरा प्रश्न) के पाठ। –

उत्तर

6

ऐसा लगता है कि नेटवर्किंग/अनुमति/इनपुट समस्याओं के लिए कोई और विवरण नहीं है।

Is it possible to distinguish fetch errors from other TypeErrors?

हाँ, तुम सिर्फ catch करने की जरूरत है केवल fetch कॉल से त्रुटियों:

fetch(…) 
.catch(err => new FetchError(err)) 
.… 

class FetchError extends Error { 
    constructor(orig) { 
     super(); 
     this.message = "fetch error"; 
     this.details = orig; 
    } 
} 
+0

यह भी प्राप्त यूआरएल के प्रोटोकॉल की जांच करने लायक है। Http: // साइट पर https: // को कॉल करने से यह त्रुटि –

+0

भी हो सकती है, यह जांचकर कि आपकी '4XX' और' 5XX' प्रतिक्रियाएं 'एक्सेस-कंट्रोल-ऑब्जेक्ट-ऑरिजन: * हेडर' वापस नहीं लौट रही हैं कारण। –

संबंधित मुद्दे

 संबंधित मुद्दे