2015-12-05 22 views
41

में एचटीपी कॉल को कैसे श्रृंखलाबद्ध करें I Angular2 और Http Observable में नया हूं। मेरे पास एक घटक है जो एचटीपी सेवा को कॉल करता है और अवलोकन योग्य देता है। मैं उस पर्यवेक्षक की सदस्यता लेता हूं और यह ठीक काम करता है।Angular2

अब, मैं चाहता हूं कि उस घटक में, पहली एचटीपी सेवा को कॉल करने के बाद, अगर कॉल सफलता हो, तो अन्य एचटीपी सेवा को कॉल करें और उस अवलोकन को वापस कर दें। इसलिए, यदि पहली कॉल सफलता नहीं है तो घटक उस अवलोकन योग्य लौटाता है, इसके विपरीत, दूसरी कॉल का अवलोकन करता है।

तो सवाल यह है कि एचटीपी कॉल श्रृंखला का सबसे अच्छा तरीका क्या है? क्या कोई शानदार तरीका है, उदाहरण के लिए मोनैड की तरह?

import 'rxjs/add/operator/mergeMap';

तो यहाँ है कि कैसे आप दो कॉल श्रृंखला:

this.http.get('./customer.json') 
      .map((res: Response) => res.json()) 
      .mergeMap(customer => this.http.get(customer.contractUrl)) 
      .map((res: Response) => res.json()) 
      .subscribe(res => this.contract = res); 

कुछ और

उत्तर

67

आप इस प्रकार mergeMap ऑपरेटर

पहले आयात ऑपरेटर का उपयोग कर ऐसा कर सकते विवरण यहां: http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http

mergeMap ऑपरेटर बारे में अधिक जानकारी here

+5

पाया जा सकता है के साथ कोणीय 2.0 (बीटा 0) निम्नलिखित की आवश्यकता है: आयात 'rxjs/जोड़/ऑपरेटर/नक्शा'; आयात 'rxjs/add/operator/mergeMap' आयात करें; –

+0

हालांकि यह पूरी तरह से निष्पादित करता है। जब भी मैं मार्ग पर फिर से जाता हूं http कॉल को अतिरिक्त रूप से 2 बार निकाल दिया जाता है। ngOnInit() { काउंटर 1 = 0, counter2 = 0; console.log ('MyBiraComponent ngOnInit'); uk = this.us.get() दें; this.u = uk.map (व्यक्ति => { console.log ('लाइन 45:', ++ counter1); वापसी person.id; }) flatMap (आईडी => { console.log (। 'लाइन 48:', ++ काउंटर 2); इस.bu.get (आईडी) को वापस करें; }) सदस्यता लें (res => { console.log (res); }); } ngOnDestroy() { this.u.unsubscribe(); } – Prabhat

+0

ने इसे यहां एक प्रश्न के रूप में पोस्ट किया है http://stackoverflow.com/questions/41087885/chained-rx-calls-called-multiple-times – Prabhat