2014-10-21 6 views
5

द्वारा दिया अगर मैं $ अंतराल का उपयोग करके एक वादा बनाने वादा रद्द करने में असमर्थ है, यह देखें रद्द करने योग्य है: http://jsbin.com/jeweke/2/

timer = $interval(intervalFunc, intervalDelay, 10); 
timer.then(
    function(res) {console.log('ok', res);}, 
    function(err) {console.log('err', err);} 
); 

हालांकि, अगर मैं वादा श्रृंखला, लौटे वादा रद्द करने योग्य नहीं है । देखें: http://jsbin.com/jeweke/1/

timer = $interval(intervalFunc, intervalDelay, 10) 
.then(
    function(res) {console.log('ok', res);}, 
    function(err) {console.log('err', err);} 
); 

क्या देता है? क्या यह सिर्फ काम करना है?

नोट - यहाँ उदाहरण शिथिल से http://jsfiddle.net/ExpertSystem/fZc3W/

उत्तर

6

है ऐसा इसलिए है क्योंकि $interval से वादा श्रृंखला का परिणाम संपत्ति जो अंतराल आईडी ($$intervalId) शामिल नहीं है अनुकूलित है। पहला मामला आप टाइमर वादा जो $intervalId है बचत कर रहे हैं, दूसरे मामले में आप वादा बचत कर रहे हैं श्रृंखला है जो $intervalId संपत्ति के बिना एक कच्चे क्ष वादा (जो एक कस्टम गुण वादा संबंधित setInterval स्टोर करने के लिए पर जोड़ा है से लौटे जब आप $interval(... पर कॉल करते हैं तो आईडी)। जब आप टाइमर को रद्द करते हैं तो इसे रद्द करने के लिए $intervalId की आवश्यकता होती है और संबंधित टाइमर वादे को अस्वीकार कर दिया जाता है।

यह वही है interval.cancel करता

interval.cancel = function(promise) { 
     if (promise && promise.$$intervalId in intervals) { 
     intervals[promise.$$intervalId].reject('canceled'); 
     clearInterval(promise.$$intervalId); 
     delete intervals[promise.$$intervalId]; 
     return true; 
     } 
     return false; 
    }; 

नोट पंक्ति है: -: intervalId बिना हां, तो - ({1:promiseOfInterval1, 2:promiseOfInterval2} उदाहरण)

if (promise && promise.$$intervalId in intervals) { 

intervals लेकिन intervalId और अपने संबंधित वादा का एक नक्शा कुछ भी नहीं कर रहे हैं कोई रद्दीकरण नहीं होता है। तो संक्षेप में वादा $ अंतराल द्वारा दिया क्ष वादा प्लस $ intervalId संपत्ति है और जब आप इसे पूरी तरह से श्रृंखला यह सिर्फ $q कार्यान्वयन जो वापस लौट एक नया आस्थगित वस्तु की वादा है।

+0

महान विवरण। स्रोत में खुदाई के लिए धन्यवाद। – RoyM

+0

@roymath आपका स्वागत है ... :) – PSL

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