2016-11-09 7 views
10

मैं angular2 एप्लिकेशन पर काम कर रहा हूँ जिसमें मैं नीचे के रूप में HTTP के माध्यम से एक आराम कॉल कर रहा हूँ:कोणीय त्रुटि में मैन्युअल रूप से देखने योग्य त्रुटि कैसे फेंकें?

login(email, password) { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
    let options = new RequestOptions({ headers: headers }); 
    let body = `identity=${email}&password=${password}`; 
    return this.http.post(`${this._configService.getBaseUrl()}/login`, body, options) 
    .map((res: any) => { 
     let response: any = JSON.parse(res._body); 
     if (response.success == 0) { 
      Observable.throw(response); // not working 
     } else if (response.success == 1) { 
      console.log('success'); 
      localStorage.setItem('auth_token', 'authenticated'); 
      this.loggedIn = true; 
      return response; 
     } 
    }); 
} 

मूल रूप से मैं अपने घटक मेरी सदस्यता के कॉल में प्रतिक्रिया & त्रुटि प्राप्त करना चाहते हैं।

अर्थात

this._authenticateService.login(this.loginObj['identity'],this.loginObj['password']).subscribe(
    (success)=>{  
    this.credentialsError=null; 
    this.loginObj={}; 
    this._router.navigate(['dashboard']);  
    }, 
    (error)=>{ 
    console.log(error);   
    this.credentialsError=error;  
    } 
); 

लेकिन मेरे एपीआई हमेशा सफलता देता है के रूप में यह आईडी कि जिस तरह से परिभाषित किया।

तो मैं जानना चाहता हूं कि response.success == 0 पर त्रुटि संदेश कैसे फेंक सकता है, ताकि इसे मेरे सब्सक्राइब कॉलबैक के त्रुटि तर्क के अंदर पहुंचाया जा सके।

+0

क्या है स्थिति कोड आप मिल रहा है, मेरा मतलब यह किसी और फिर 0 हो सकता है? –

+0

@MrJSingh जिस व्यक्ति ने एपीआई डिज़ाइन किया है, केवल प्रतिक्रिया को सत्यापित करने के लिए 0 या 1 के रूप में सफलता लौटा दी। इसलिए मैं अपना ऑपरेशन सफल था, यह सफलता = 1 लौटाएगा या सफलता = 0 लौटाएगा। अब मैं सफलता में त्रुटि फेंकना चाहता हूं 0.is है कि संभव है? –

+0

मुझे अपने ऐप पर आज़माएं, तकनीकी रूप से यह संभव होना चाहिए। –

उत्तर

28
if (response.success == 0) { 
    throw Observable.throw(response); 
} 
+0

में आयोजित एक समारोह नहीं है मैं सफलता कॉलबैक में यह हो रही है का उपयोग नहीं इस –

+1

मुझे समझ नहीं आता के बाद भी इसका उपयोग न करने पर भी आपका क्या मतलब है? क्या आप इसे मुझे समझा सकते हैं? मैंने इसका परीक्षण किया क्योंकि आपके पास मामला है और पर्यवेक्षक केवल 0 है। सफलता 0 है। –

+0

मेरा मतलब है कि अगर मेरी प्रतिक्रिया कुछ भी लौट रही है, तो यह त्रुटि या सफलता हो, यह हमेशा सफलता कॉलबैक में वापस आ जाएगी। मुझे त्रुटि फेंकना है त्रुटि कॉलबैक में .. –

0

पकड़ ऑपरेटर

this.calcSub = this.http.post(this.constants.userUrl + "UpdateCalculation", body, { headers: headers }) 
    .map((response: Response) => { 
     var result = <DataResponseObject>response.json(); 
     return result; 
    }) 
    .catch(this.handleError) 
    .subscribe(
     dro => this.dro = dro, 
    () => this.completeAddCalculation() 
    ); 

का उपयोग करें और इस तरह त्रुटि संभाल:

private handleError(error: Response) { 
    console.error(error); // log to console instead 
    return Observable.throw(error.json().error || 'Server Error'); 
} 
+0

मेरी एपीआई कभी भी ब्लॉक ब्लॉक नहीं कहता है। यह मुद्दा है कि मैं कर रहा हूँ। मेरी प्रतिक्रिया में मैं कुछ शर्त की जांच करना चाहता हूं और फिर त्रुटि फेंकना या पकड़ ब्लॉक को कॉल करना चाहता हूं। –

+0

मैं निजी handleError (त्रुटि: उत्तर) के साथ इस त्रुटि मिल गया है। __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable __ a.throw CatchSubscriber.selector –

3

या तो

throw response; 

या

return Observable.throw(response); // not working 
+0

दूसरे के लिए काम करता है यह होगा: 'फेंकने योग्य। थ्रो (प्रतिक्रिया)' –

0

आप उपयोग कर सकते हैं:

import { ErrorObservable } from 'rxjs/observable/ErrorObservable'; 

if (response.success == 0) { 
    return new ErrorObservable(response); 
} 

क्या आप ErrorObservable के साथ वापसी आप पर निर्भर है

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