angular क्या एचटीपी तरीकों द्वारा बनाए गए अवलोकनों से सदस्यता समाप्त करना आवश्यक है?




memory-leaks rxjs (4)

मेमोरी रिसाव को रोकने के लिए आपको कोणीय 2 http कॉल से सदस्यता समाप्त करने की आवश्यकता है?

 fetchFilm(index) {
        var sub = this._http.get(`http://example.com`)
            .map(result => result.json())
            .map(json => {
                dispatch(this.receiveFilm(json));
            })
            .subscribe(e=>sub.unsubscribe());
            ...

तो जवाब नहीं है, आप ng2 खुद के बाद सफाई नहीं करेंगे

एंगुलर के एचटीपी एक्सएचआर बैकएंड स्रोत से एचटीपी सेवा स्रोत:

ध्यान दें कि परिणाम प्राप्त करने के बाद यह "पूर्ण" कैसे चलता है। इसका मतलब है कि यह वास्तव में पूरा होने पर सदस्यता समाप्त करता है। तो आपको इसे स्वयं करने की आवश्यकता नहीं है।

सत्यापन करने के लिए यहां एक परीक्षण दिया गया है:

  fetchFilms() {
    return (dispatch) => {
        dispatch(this.requestFilms());

        let observer = this._http.get(`${BASE_URL}`)
            .map(result => result.json())
            .map(json => {
                dispatch(this.receiveFilms(json.results));
                dispatch(this.receiveNumberOfFilms(json.count));
                console.log("2 isUnsubscribed",observer.isUnsubscribed);
                window.setTimeout(() => {
                  console.log("3 isUnsubscribed",observer.isUnsubscribed);
                },10);
            })
            .subscribe();
        console.log("1 isUnsubscribed",observer.isUnsubscribed);
    };
}

जैसा कि अपेक्षित है, आप देख सकते हैं कि परिणाम प्राप्त करने और देखने योग्य ऑपरेटरों के साथ परिष्करण के बाद यह हमेशा सदस्यता समाप्त हो जाता है। यह एक टाइमआउट (# 3) पर होता है, इसलिए जब हम सब कुछ पूरा हो जाता है और पूरा हो जाता है तो हम अवलोकन की स्थिति की जांच कर सकते हैं।

और परिणाम

एनजी 2 ऑटो सदस्यता रद्द करने के रूप में कोई रिसाव नहीं! इस पर मदद के लिए धन्यवाद rubyboy ..


unsubscribe रद्द करने की विधि को कॉल करना एक प्रगति HTTP अनुरोध को रद्द करने के बजाय है क्योंकि यह विधि अंतर्निहित XHR ऑब्जेक्ट पर abort करने को कॉल करती है और श्रोताओं को लोड और त्रुटि ईवेंट पर हटा देती है:

// From the XHRConnection class
return () => {
  _xhr.removeEventListener('load', onLoad);
  _xhr.removeEventListener('error', onError);
  _xhr.abort();
};

उस ने कहा, unsubscribe को हटा देता है ... तो यह एक अच्छा विचार हो सकता है लेकिन मुझे नहीं लगता कि यह एक अनुरोध के लिए जरूरी है ;-)

उम्मीद है कि यह आपकी मदद करता है, थियरी


आपको अवलोकनों से सदस्यता समाप्त नहीं करनी चाहिए जो स्वचालित रूप से पूर्ण हो जाती हैं (उदाहरण के लिए एचटीपी, कॉल)। लेकिन Observable.timer() जैसे अनंत अवलोकनों से सदस्यता समाप्त करना आवश्यक है।


नए एचटीपी क्लाइंट मॉड्यूल के साथ, वही व्यवहार बना रहता है







angular2-http