2016-06-29 15 views
5

मैं restClient के लिए AngularJS 2 में एक आधार वर्ग इस विधि के साथ एपीआई से डेटा कॉल करनी होगी:AngularJS 2 ZoneAwarePromise बजाय एक बूलियन मान

public getInfoDataBooleanRequest(url: string): InfoDataBoolean { 
    return this.http.get(this.urlApiPrefix + url, this.createRequestOptions()) 
     .toPromise() 
     .then(response => <InfoDataBoolean>response.json()) 
     .catch(this.handleError); 
} 

जहां InfoDataBoolean दो गुणों के साथ एक वर्ग है:

export class InfoDataBoolean { 
    public data: boolean; 
    public error: string; 
} 

मेरे पास एक और कक्षा है जहां मैंने अपनी सेवा विधि बुलाई। यह कॉल एक विधि के अंदर है जहां मैं InfoDataBoolean से डेटा वापस करना चाहता हूं, इस तरह क्लास InfoDataBoolean नहीं।

public isLogged(): boolean { 
    return this.getInfoDataBooleanRequest('islogged').then(x => { 
     let result: InfoDataBoolean = x; 

     if(result.error !== "1") { 
     console.log('Success is failed'); 
     return false; 
     } 

     return result.data; 
    }); 
} 

console.log(isLogged()) के उत्पादन:

ZoneAwarePromise {__zone_symbol__state: अशक्त, __zone_symbol__value: सरणी [0]}

लेकिन मैं अपने विधि isLogged() से true या false वापस जाने के लिए चाहते हैं।

मैं यह कैसे कर सकता हूं?

उत्तर

9

यह मत भूलना कि आपकी isLogged विधि असीमित है और एक वादा वापस कर देता है। परिणाम प्राप्त करने के लिए आप then विधि के साथ उस पर एक कॉलबैक रजिस्टर करने की आवश्यकता:

console.log(isLogged()); 
isLogged().then(data => { 
    console.log(data); 
}); 

आपके मामले में, आप वादा और लौट आए परिणाम को प्रदर्शित जब यह समाधान हो जाएगा ...

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