2013-06-19 13 views
10

मैं कैसे सुनिश्चित कर सकता हूं कि complete() फ़ंक्शन Angular.js के साथ प्रदान किए गए वादे एपीआई का उपयोग करके $ http कॉल के नतीजे पर ध्यान दिए बिना चलाएगा?

$http({ 
    method: 'POST', 
    url: submitUrl, 
    data: $scope.data 
}) 
.success(function(data) { 
     // execute this code on success 
}) 
.error(function(data) { 
     // execute this code on error 
}) 
.complete(function() { 
    // execute this code regardless of outcome 
}); 

अनुरोध पूरा होने के बाद कोई AJAX स्पिनर आइकन छुपाने के लिए इसका उपयोग कर सकता है। अनुरोध परिणाम के बावजूद आप स्पिनर को छिपाना चाहते हैं।

+0

आप इस तरह से क्या करना चाहते हैं? –

उत्तर

15

मैं दुनिया की Angular.js में सबसे बड़ी विशेषज्ञ नहीं हूँ, लेकिन समझते हैं कि आप इस प्रकार कर सकते हैं:

whatever.then(function() { 
    // success code here 
}, function() { 
    // error code here 
    return true; // return anything that's not undefined (and not a `throw()`) to force the chain down the success path at the following then(). 
}).then(function() { 
    // "complete" code here 
}); 

आप अनिवार्य रूप से एक या अधिक .then() है, जो एक $ q वादा का है से कुछ ईजाद करने के लिए मजबूर किया जाता है केवल विधि

+0

समझ में आता है। दूसरा .then() को पहली बार हल या अस्वीकार कर दिया जाता है। – Failpunk

8

यदि आप यदि अनुरोध सफल होने या नहीं परवाह नहीं है, तो आप एक ही कॉलबैक success और error को पारित कर सकते हैं ...

var cb = function(response){ 
     // do something 
    }; 


    $http.post(submitUrl, $scope.data).success(cb).error(cb); 

    // OR 

    $http.post(submitUrl, $scope.data).then(cb, cb); 

लेकिन ध्यान रखें कि success और error कॉलबैक एक अलग हो then कॉलबैक से हस्ताक्षर।

इसके अलावा, वादों कोणीय में templating इंजन, जिसका अर्थ है कि टेम्पलेट्स में आप एक गुंजाइश से जुड़ी वादों का इलाज कर सकते द्वारा मान्यता प्राप्त हैं, जैसे कि वे परिणामस्वरूप मूल्य थे।

इसका मतलब है आप यह कर सकते हैं कि:

नियंत्रक:

$scope.article = $http.get('/articles/' + articleId); 

टेम्पलेट:

<article ng-cloak> 
    <h3>{{article.title}}</h3> 
    <div>{{article.content}}</div> 
</article> 

और जब $http.get वादा हल किया गया है दृश्य अद्यतन करेगा।

+1

मैं वादे और टेम्पलेटिंग इंजन में पढ़ूंगा, दिलचस्प लगता है। – Failpunk

+0

लगभग 1 साल बाद, एक त्वरित नोट कि टेम्पलेट्स में अनचाहे वादा (ऑटो-) को संस्करण 1.2.0 में हटा दिया गया है [https://github.com/angular/angular.js/commit/fa6e411da26824a5bae55f37ce7dbb859653276d)। – bernhardw

12

यह आप क्या करना चाहते हैं क्या पर निर्भर करता है, लेकिन सफाई तर्क और इसी तरह के लिए आप भी finally() उपयोग कर सकते हैं या तो पूरा या अपने वादे की अस्वीकृति पर चलाने के लिए:

promise.finally(function() { 
    // Do something regardless of outcome. 
}); 

कृपया ध्यान दें कि finally() हालांकि $q (और कुछ अन्य पुस्तकालयों) द्वारा समर्थित है official draft का हिस्सा नहीं है।

+0

मेरे लिए यह काम, मैं AJAX फिनिश अनुरोधों को नियंत्रित करने और आइकन लोडिंग को छुपाता था – vandersondf

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