2012-07-22 15 views
28

क्या कोई जानता है कि आप यह देखने के लिए कैसे जांच सकते हैं कि AngularJS में संसाधन लाने में विफल रहा है?AngularJS विफल संसाधन

उदाहरण के लिए:

//this is valid syntax 
$scope.word = Word.get({ id : $routeParams.id },function() { 
    //this is valid, but won't be fired if the HTTP response is 404 or any other http-error code 
}); 

//this is something along the lines of what I want to have 
//(NOTE THAT THIS IS INVALID AND DOESN'T EXIST) 
$scope.word = Word.get({ id : $routeParams.id },{ 
    success : function() { 
     //good 
    }, 
    failure : function() { 
     //404 or bad 
    } 
}); 

कोई भी विचार?

उत्तर

48

त्रुटि होने पर आपके पहले कॉलबैक फ़ंक्शन के बाद एक अतिरिक्त कॉलबैक फ़ंक्शन आग लगाना चाहिए। docs और समूह post से लिया:

$scope.word = Word.get({ id : $routeParams.id }, function() { 
    //good code 
}, function(response) { 
    //404 or bad 
    if(response.status === 404) { 
    } 
}); 
  • HTTP GET "वर्ग" कार्रवाई: Resource.action ([मापदंडों], [सफलता], [त्रुटि])
  • गैर GET "वर्ग "क्रियाएं: संसाधन। प्रतिक्रिया ([पैरामीटर], पोस्टडाटा, [सफलता], [त्रुटि])
  • गैर-जीईटी उदाहरण क्रियाएं: उदाहरण। $ कार्रवाई ([पैरामीटर], [सफलता], [त्रुटि])
+0

बिल्कुल सही। यह ठीक वैसा ही है जैसा मुझे चाहिए। धन्यवाद :) – matsko

+1

समस्या अगर कथन में है। क्या मुझे लिखना है (reponse.status == 404), अगर (reponse.status == 500), अगर (reponse.status == 501), अगर .. अगर .. अगर? क्या यह कोड डुप्लिकेशन नहीं है – Adelin

+1

@Adio आप एक स्विच स्टेटमेंट का उपयोग कर सकते हैं। –

5

बस @Adio के सवाल का जवाब देने के लिए।

दूसरी कॉलबैक तब कॉल की जाएगी जब किसी भी HTTP प्रतिक्रिया कोड को AngularJS द्वारा त्रुटि माना जाता है (केवल [200, 300] में प्रतिक्रिया कोड को सफलता कोड माना जाता है)। तो आपके पास एक सामान्य त्रुटि प्रबंधन कार्य हो सकता है और विशिष्ट त्रुटि की परवाह नहीं है। अगर कथन का उपयोग त्रुटि कोड के आधार पर विभिन्न कार्यों को करने के लिए किया जा सकता है, लेकिन यह अनिवार्य नहीं है।

0

यह सिर्फ सूचित करने के लिए है।

कोणीय 1.6.x से, सफलता और विफलता को बहिष्कृत किया गया है। तो कृपया उस समय का पालन करें और सफलता और विफलता की तरफ से पकड़ लें।

तो, कोणीय 1.6.x में की तरह ऊपर कोड देखो के रूप में नीचे है:

$scope.word = Word.get({ id : $routeParams.id }).then(=>() { 
    //this is valid, but won't be fired if the HTTP response is 404 or any other http-error code 
}).catch(=>() { 
    // error related code goes here 
}); 
+1

सच है, लेकिन ध्यान दें कि कोणीय टीम को "बहिष्कृत" का अर्थ है "पूरी तरह हटा दिया गया"।ध्यान दें कि एक विफलता हैंडलर के बिना $ संसाधन के परिणामस्वरूप "कारण" (खाली स्ट्रिंग, शून्य डेटा, कोई अन्य फ़ील्ड) में कोई उपयोगी जानकारी नहीं है (कारण) को पकड़ने के लिए (कारण) आपका सर्वोत्तम/केवल विकल्प प्राप्त करना है()। $ वादा। (सफलता(), असफल()) और सुनिश्चित करें कि आप असफल func को संभाल लें। और शुभकामनाएं। (V1.6.2) – tekHedd