2016-06-29 4 views
5

У меня есть базовый класс в AngularJS 2 для restClient для вызова данных из API с помощью этого метода: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: Array [0]}

Но я хочу вернуться true или false из моего метода isLogged().

Как это сделать?

ответ

9

Не забывайте, что ваш метод isLogged является асинхронным и возвращает обещание. Для того, чтобы получить результат, вам нужно зарегистрировать обратный вызов по нему с помощью метода then:

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

В вашем случае, вы показываете обещание и возвращаемый результат, когда он будет решен ...

Смежные вопросы