Проблема с RXJS Observables, выполняющими вызовы REST?

У меня есть приложение Angular 2, которое я подключаю к серверной части RESTful. Бэкэнд работает нормально. Приложение Angular 2 работало нормально, пока я использовал его с локальным хранилищем. Теперь я застрял на наблюдаемых.

Главный компонент вызывает службу при инициализации:

ngOnInit() {
    this.appList = this.appListService.getAppList();
}

AppListService вызывает службу хранилища с запросом GET:

getAppList() {
  console.log(this.storage.get());
  return this.storage.get();

}

Служба хранилища обращается к серверной части с запросом на получение через конечную точку:

get(): Observable<Course[]> {
    return this.http.get(this.BaseUrl)
                    .map(this.extractData)
                    .catch(this.handleError);
                    }

Согласно журналу консоли, все это дает мне следующее:

Observable_isScalar: falseoperator: CatchOperatorsource: Observable__proto__: Object

Итак, как я могу превратить наблюдаемое в массив объектов, который должен возвращать запрос GET из серверной части?


person Boris K    schedule 25.01.2017    source источник
comment
Нет лучшего места, чем документы: angular.io/docs/ts /latest/guide/server-communication.html   -  person olsn    schedule 25.01.2017


Ответы (1)


Вам нужно будет подписаться на наблюдаемое.

    this.storage.get().subscribe((data: any) => {          
               console.log(data); 
    },
    error => {
               // handle the error
            });
person Ben Cameron    schedule 25.01.2017
comment
Я получаю сообщения об ошибках, которые предполагают, что требуется обработка ошибок. Что-то вроде этого, может быть? getAppList () {this.storage.get (). subscribe ((data: any) = ›{console.log (data); return (data);}, error =› {console.log (error)}); } - person Boris K; 26.01.2017
comment
Вышеупомянутое, похоже, работает, но я получаю ошибки CORS. Если вас устраивает, я хотел бы исправить их и проверить, работает ли он, прежде чем принимать ответ. - person Boris K; 26.01.2017
comment
Ошибка CORS будет происходить на стороне сервера, api должен будет разрешить другим доменам вызывать ее. Это не связано с частью Angular. - person Ben Cameron; 26.01.2017
comment
Исправлены ошибки CORS. Ваш предложенный ответ вызывает у меня ошибку - он говорит, что ему нужна запятая вместо последней фигурной скобки. Это не вызывает ошибки: getAppList() { this.storage.get().subscribe((data: any) => { console.log(data.toString()); return (data); }, error => {console.log(error)}); } Но это дает мне объект, с которым JSON.stringify () не работает. То же самое и с методом toString (). - person Boris K; 26.01.2017
comment
Учитывая, что исходный вопрос касался подписки, я думаю, вы можете отметить это как ответ. Второй вопрос, который вы задали, касался обработки ошибок, на который также был дан ответ. Я думаю, что ваша последняя проблема связана с данными, возвращаемыми из api. Это действительно так? Как это будет выглядеть, если распечатать в консоль. Вам может понадобиться использовать JSON.parse (data); Stringify превращает объект в строку, вы хотите наоборот. - person Ben Cameron; 27.01.2017
comment
Спасибо, Бен, извини за задержку. Очень признателен за вашу помощь. - person Boris K; 30.01.2017
comment
Кстати, все немного продвинулось и снова сломалось: stackoverflow.com/questions/41935722/ - person Boris K; 30.01.2017