त्रुटियाँ, समयबाह्य और पुनः प्रयास
यह कैसे पढ़ें कि कुछ गलत होने पर invoke क्या लौटाता है, और जब आप सुरक्षित रूप से दोबारा कॉल कर सकते हैं।
1. त्रुटि वस्तु
invoke { data, error } लौटाता है और कभी फेंकता नहीं है। error एक AuraError है, इसलिए isAuraError(error) सत्य है। दो उपवर्ग आपको बताते हैं कौन असफल हुआ:
| मैदान | अर्थ |
|---|---|
error.status | HTTP स्थिति. 0 का अर्थ है कि क्लाइंट पर विफलता हुई (कोई प्रतिक्रिया नहीं)। |
error.code | स्थिर पहचानकर्ता, उदाहरण के लिए NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body। |
error.message | आपके फ़ंक्शन द्वारा लौटाया गया पाठ, या प्लेटफ़ॉर्म का स्पष्टीकरण। |
error.context | FunctionsHttpError पर: वह बॉडी जो आपका फ़ंक्शन लौटाता है (पार्स किया गया JSON या टेक्स्ट)। |
error.details | अपरिष्कृत त्रुटि निकाय. प्लेटफ़ॉर्म त्रुटि के लिए इसमें error.request_id शामिल है। |
2. यह कौन सी त्रुटि है?
चल रहे स्टैक के विरुद्ध व्यवहार का अवलोकन किया गया। कोटा पंक्ति बैकएंड की त्रुटि मैपिंग का अनुसरण करती है और हमारे परीक्षणों में ट्रिगर नहीं हुई थी।
| क्या हुआ | कक्षा | status | code | message |
|---|---|---|---|---|
| फ़ंक्शन मौजूद नहीं है | FunctionsHttpError | 404 | NOT_FOUND | "...फ़ंक्शन 'नहीं' अप्राप्य" |
आपका फ़ंक्शन टेक्स्ट के साथ 500 लौटाता है | FunctionsHttpError | 500 | http_500 | वह पाठ |
आपका फ़ंक्शन स्वयं 503 लौटाता है | FunctionsHttpError | 503 | http_503 | तुमने क्या लौटाया |
| आपका फ़ंक्शन फेंकता है | FunctionsHttpError | 500 | http_500 | "आंतरिक सर्वर त्रुटि" |
आपका फ़ंक्शन अपने timeout_secs से अधिक है | FunctionsHttpError | 500 या 503 | http_500 / http_503 | "फ़ंक्शन निष्पादन विफल" या "फ़ंक्शन ने HTTP 503 लौटाया" |
| रनटाइम पहुंच योग्य नहीं है | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | बताते हैं कि फ़ंक्शन था न कि रन |
| किसी भी प्रतिक्रिया से पहले ही नेटवर्क फेल हो जाता है | FunctionsRelayError | 0 | network_error | नेटवर्क त्रुटि |
| योजना कोटा समाप्त हो गया | FunctionsHttpError | 403 | QUOTA_EXCEEDED | कोटा संदेश |
| एक ग्राहक से बहुत अधिक कॉलें | FunctionsHttpError | 429 | rate_limit_exceeded | संदेश प्रतीक्षा करें |
| अनुरोध का मुख्य भाग बहुत बड़ा है | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | "अधिकतम पेलोड आकार पार हो गया" |
आपने रद्द कर दिया, या आपका timeout समाप्त हो गया | AuraError | 0 | timeout | "फ़ंक्शन मंगलाचरण निरस्त या समयबाह्य" |
| मुख्य भाग को JSON के रूप में नहीं भेजा जा सकता | AuraError | 0 | invalid_body | बचने के प्रकार का नाम बताएं |
यदि आपका अपना कोड 502, 503 या 504 लौटाता है, तो आपको FunctionsHttpError मिलता है: क्लास आपको बताती है कि किसने उत्तर दिया, न कि स्थिति संख्या क्या है।
लगभग 256 KiB से ऊपर के अनुरोध निकाय को 503 SERVICE_UNAVAILABLE के साथ अस्वीकार कर दिया जाता है, और लगभग 300 KB या उससे अधिक की प्रतिक्रिया हमारे 50-सेकंड के परीक्षण के भीतर वापस नहीं आई। सीमाएं देखें। पुनः प्रयास करने से मदद नहीं मिलती; कम डेटा भेजें, या स्टोरेज का उपयोग करें।
3. तय करें कि पुनः प्रयास करना है या नहीं
SDK कभी भी आपके लिए किसी मंगलाचरण का पुनः प्रयास नहीं करता है: आपके फ़ंक्शन के दुष्प्रभाव हो सकते हैं, और बार-बार POST डिफ़ॉल्ट रूप से सुरक्षित नहीं है। आप नीचे दी गई तालिका का उपयोग करके निर्णय लें।
| असफलता | क्या फ़ंक्शन चला? | पुनः प्रयास करना सुरक्षित है? |
|---|---|---|
मंच से 503 (FunctionsRelayError) | नहीं, रनटाइम पहुंच योग्य नहीं था | हाँ, एक छोटे से बैक-ऑफ़ के साथ |
429 | नहीं | हाँ, error.retryAfter में देरी के बाद |
403 QUOTA_EXCEEDED | नहीं | नहीं, जब तक कोटा रीसेट नहीं हो जाता या आप योजना नहीं बदल देते |
status 0 (network_error) | अज्ञात | केवल तभी जब आपका कार्य निष्क्रिय हो |
क्लाइंट पर timeout | अज्ञात | केवल तभी जब आपका कार्य निष्क्रिय हो |
FunctionsHttpError 5xx | हाँ, आंशिक रूप से या पूर्णतः | केवल तभी जब आपका कार्य निष्क्रिय हो |
FunctionsHttpError 4xx | हाँ | नहीं: अनुरोध ठीक करें |
प्लेटफ़ॉर्म कॉल को डीडुप्लिकेट नहीं करता है और Idempotency-Key को अनदेखा करता है। भुगतान या ई-मेल के लिए, एक कुंजी संग्रहीत करें जिसे आप body में पास करते हैं और फ़ंक्शन की शुरुआत में इसकी जांच करें।
4. समयबाह्य
तीन घड़ियाँ एक साथ चलती हैं:
| घड़ी | गलती करना | इसे कहां बदला जाए |
|---|---|---|
| आपका ग्राहक | प्रत्येक responseType के लिए 30 सेकंड | क्लाइंट विकल्पों में invoke(…, { timeout }), { signal }, या requestTimeoutMs |
| समारोह | 30 सेकंड, 1 और 300 के बीच | फ़ंक्शन पर permissions.timeout_secs |
| प्रवेशद्वार | 380 s | परियोजनाओं द्वारा कॉन्फ़िगर करने योग्य नहीं |
जब फ़ंक्शन timeout_secs से अधिक हो जाता है, तो रनटाइम इसे रद्द कर देता है और ऊपर दिखाए गए 500 या 503 के साथ, उस देरी के बाद आपकी कॉल विफल हो जाती है। कारण रॉ मोड में error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) में दिखाई देता है। इस त्रुटि को देखने के लिए क्लाइंट timeout के बजाय अपने क्लाइंट timeout को फ़ंक्शन के timeout_secs से थोड़ा ऊपर सेट करें।
कुछ सेकंड से अधिक समय तक काम करने के लिए, कनेक्शन को खुला रखने के बजाय एक कार्य को कतारबद्ध करें।
5. कारण खोजें
- प्लेटफ़ॉर्म त्रुटियों में एक अनुरोध आईडी होती है:
error.details.error.request_id। जब आप सहायता से संपर्क करें तो इसे उद्धृत करें। aura functions logs <name>विधि, पथ, स्थिति, अवधि और अनुरोध आईडी के साथ हाल के HTTP अनुरोधों को सूचीबद्ध करता है। यह नहीं दिखाता है कि आपके फ़ंक्शन नेconsole.logयाconsole.errorके साथ क्या लिखा है: वह आउटपुट रनटाइम के अपने लॉग में रहता है, जिसे केवल प्लेटफ़ॉर्म ऑपरेटर ही पढ़ सकता है। इसके और अन्य मौजूदा अंतरालों के लिए सीमाएं देखें।- कॉल का पहचानकर्ता आपके फ़ंक्शन पर अग्रेषित नहीं किया गया है।
headersमें अपनी खुद की आईडी पास करें और लॉग इन करें।