मेरे पास वर्तमान में एक ऐसी सेवा है जो डेटा लाने के लिए एक एपीआई को HTTP अनुरोध करती है। कुछ तर्क हैं जो मैं सेवा के भीतर से देखने योग्य करना चाहता हूं, लेकिन मैं अभी भी अपने घटक में अवलोकन योग्य की सदस्यता लेना चाहता हूं ताकि मैं घटक और उपयोगकर्ता को किसी भी त्रुटि को वापस कर सकूं।

वर्तमान में मैं करता हूं:

// service.ts
getData(): Observable<any> {
    return this.http.get(url).pipe(catchError(this.handleError)
}

// component.ts
ngOnInit() {
    this.service.getData().subscribe(res => {
        // Do my logic that belong to the service.ts
        // ...

        // Do my logic that belongs in the component.ts
        // ...
    }, err => this.errors = err)
}

मैं जो करना चाहता हूं वह यह है कि मैं इसे रिफैक्टर करना चाहता हूं ताकि मैं getData() विधि के भीतर सदस्यता और service.ts से संबंधित तर्क को संभाल सकूं, और फिर HTTP प्रतिक्रिया और घटक में किसी भी त्रुटि के साथ एक अवलोकन योग्य वापस कर दूं ताकि मैं वहां काम करना जारी रख सकते हैं।

ऐसा करने का पैटर्न क्या है?

10
Marcus Lind 3 अप्रैल 2018, 15:41

3 जवाब

आप this को हटा सकते हैं, और map का उपयोग कर सकते हैं। सदस्यता त्रुटि में, आप त्रुटि घटना प्राप्त कर सकते हैं।

यदि आप एचटीपी क्लाइंट का उपयोग करते हैं, तो बस प्राप्त करें!

-2
Bhargav Rao 10 अप्रैल 2019, 18:51

आप http.get विधि द्वारा लौटाए गए ऑब्जर्वेबल पर सीधे "मैप" और "कैच" फ़ंक्शन का उपयोग कर सकते हैं।

import { catchError, map } from 'rxjs/operators';

getData(): Observable<any> {
    return this.http.get(url)
        .map(res => {
            /* Your processing here */
            return res;
        })
        .catch(this.handleError);
}
-1
Ashish Patel 3 अप्रैल 2018, 19:02

सावधान रहें: सभी उत्तर <= कोणीय 4 के लिए हैं। कोणीय 5 में, आपको अब map() की आवश्यकता नहीं है, इसलिए इसे छोड़ दें। बस this.http.get() लौटाएं क्योंकि यह एक ऑब्जर्वेबल देता है, जहां आप सदस्यता ले सकते हैं।

इसके अलावा, ध्यान रखें कि आपको Http के बजाय HttpClient आयात करना होगा।

-1
dave0688 3 अप्रैल 2018, 13:04