angularjs - कोणीय एचटीपी समझौता: 'सफलता'/`त्रुटि` विधियों और 'फिर' के तर्कों के बीच अंतर




promise (4)

.then () चेन करने योग्य है और हल करने के लिए पिछले .then () की प्रतीक्षा करेगा।

.success () और .error () को जंजीर बनाया जा सकता है, लेकिन वे सभी एक बार में आग लग जाएंगे (इसलिए उस पर बहुत अधिक बिंदु नहीं)

.success () और .error () सरल कॉल (आसान निर्माता) के लिए बस अच्छे हैं:

$http.post('/getUser').success(function(user){ 
   ... 
})

इसलिए आपको इसे टाइप करने की आवश्यकता नहीं है:

$http.post('getUser').then(function(response){
  var user = response.data;
})

लेकिन आम तौर पर मैं .catch () के साथ सभी त्रुटियों को हैंडलर करता हूं:

$http.get(...)
    .then(function(response){ 
      // successHandler
      // do some stuff
      return $http.get('/somethingelse') // get more data
    })
    .then(anotherSuccessHandler)
    .catch(errorHandler)

यदि आपको <= IE8 का समर्थन करने की आवश्यकता है तो अपने .catch () और .finally () को इस तरह लिखें (IE में आरक्षित विधियां):

    .then(successHandler)
    ['catch'](errorHandler)

कार्य उदाहरण:

मेरी याददाश्त को रीफ्रेश करने के लिए मैंने कुछ कोडी प्रारूप में लिखा है, यह सब कैसे त्रुटियों को संभालने के साथ खेलता है आदि:

http://jsfiddle.net/nalberg/v95tekz2/

AngularJS दस्तावेज़ के अनुसार, $http को कॉल करने से निम्नलिखित वापस आते हैं:

मानक और विधि के साथ एक वादा ऑब्जेक्ट देता है और दो http विशिष्ट तरीकों: सफलता और त्रुटितब विधि दो तर्कों को सफलता और एक त्रुटि कॉलबैक लेती है जिसे प्रतिक्रिया ऑब्जेक्ट के साथ बुलाया जाएगा। सफलता और त्रुटि विधियां एक ही तर्क लेती हैं - एक फ़ंक्शन जिसे अनुरोध सफलतापूर्वक सफल या विफल होने पर बुलाया जाएगा। इन कार्यों में पारित तर्क तब विधि में पारित प्रतिक्रिया वस्तु का विनाशकारी प्रतिनिधित्व हैं।

इस तथ्य के अलावा कि एक मामले में response वस्तु का विनाश किया गया है, मुझे अंतर नहीं मिलता है

  • सफलता / त्रुटि कॉलबैक promise.then तर्क के रूप में पारित किया गया। फिर
  • promise.success के promise.success लिए तर्क के रूप में पारित कॉलबैक promise.successpromise.success / promise.errorpromise.success promise.error तरीकों

क्या वहाँ कोई? समान कॉलबैक पास करने के लिए इन दो अलग-अलग तरीकों का क्या मतलब है?


पहले से ही कुछ अच्छे जवाब हैं। लेकिन समानांतरता में अंतर को घर चलाने के लिए उपयुक्त है:

  • success() मूल वादा देता है
  • then() एक नया वादा देता है

अंतर then() अनुक्रमिक संचालन चलाता है, क्योंकि प्रत्येक कॉल एक नया वादा देता है।

$http.get(/*...*/).
  then(function seqFunc1(response){/*...*/}).
  then(function seqFunc2(response){/*...*/})
  1. $http.get()
  2. seqFunc1()
  3. seqFunc2()

success() समानांतर संचालन चलाती है, क्योंकि हैंडलर एक ही वादे पर बंधे होते हैं।

$http(/*...*/).
  success(function parFunc1(data){/*...*/}).
  success(function parFunc2(data){/*...*/})
  1. $http.get()
  2. parFunc1() , parFunc2()

सरल जीईटी अनुरोध के लिए कुछ कोड उदाहरण। शायद यह अंतर को समझने में मदद करता है। then उपयोग करना:

$http.get('/someURL').then(function(response) {
    var data = response.data,
        status = response.status,
        header = response.header,
        config = response.config;
    // success handler
}, function(response) {
    var data = response.data,
        status = response.status,
        header = response.header,
        config = response.config;
    // error handler
});

success / error का उपयोग करना:

$http.get('/someURL').success(function(data, status, header, config) {
    // success handler
}).error(function(data, status, header, config) {
    // error handler
});

एनबी यह जवाब वास्तव में गलत है; जैसा कि नीचे एक टिप्पणी द्वारा इंगित किया गया है, सफलता () मूल वादा वापस कर देता है। मैं नहीं बदलूंगा; और इसे संपादित करने के लिए ओपी को छोड़ दें।

2 के बीच बड़ा अंतर यह है कि .then() कॉल एक वादा देता है (कॉलबैक से लौटाए गए मान के साथ हल किया जाता है) जबकि .success() कॉलबैक पंजीकृत करने का अधिक पारंपरिक तरीका है और एक वादा वापस नहीं करता है।

वादा-आधारित कॉलबैक ( .then() ) चेन वादे को आसान बनाता है (कॉल करें, परिणामों की व्याख्या करें और फिर एक और कॉल करें, परिणामों की व्याख्या करें, अभी तक एक और कॉल करें आदि)।

.success() विधि एक सुव्यवस्थित, सुविधा विधि है जब आपको चेन कॉल की आवश्यकता नहीं होती है और न ही वादे API के साथ काम करती है (उदाहरण के लिए, रूटिंग में)।

संक्षेप में:

  • .then() - वादा एपीआई की पूर्ण शक्ति लेकिन थोड़ा और वर्बोज़
  • .success() - एक वादा वापस नहीं करता है लेकिन थोड़ा अधिक दृढ़ वाक्यविन्यास का .success() करता है




promise