2016-08-03 2 views
14

У меня есть функция, которая получает список объектов и POST-файлы на api.Cant get Observable of string value (angular2/typescript)

Функция возвращает Observable, так как тот, кто когда-либо называет ее, ожидает получить от нее строку, основанную на ответе api.

Если ответ хороший, я хочу вернуть определенную строку, и если это ошибка, я хочу отправить другую строку.

Это моя функция, которая возвращает строку:

public sendUpdate(updatedList: Cars[]): Observable<string> { 
return this._myService.updateListNewOrder(updatedList) 
    .map(response => "The POST worked successfully") 
    .catch(error => Observable.of("An Error occurred")); 
} 

Так что теперь я хочу, чтобы вызвать эту функцию и получить строку в моем component.ts:

messageToDisplay: string; 

    public updateList() { 
     this._myService.sendUpdate(this.listToUpdate).subscribe(
     res => this.messageToDisplay = res, // onNext 
     error => this.messageToDisplay = error // onError 
    ); 
    } 

, но это не работает ... Я не получаю ошибок. Просто MessageToDisplay остается неопределенным.

Кто-нибудь видит проблему?

Спасибо!

Если вам это нужно, это updateListNewOrder (...):

public updateListNewOrder(newOrderedList: string[]): Observable<ServerResponse> { 
    let apiURL = "my/api/url"; 
    return this.http.post(apiURL, JSON.stringify(newOrderedList), { headers: this.defaultHeaders() } 
    ); 
    } 
+0

Попробуйте изменить наблюдаемый. На Observable.throw. Из документов rxjs: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/throw.md – ajliptak

ответ

7

я воспроизвел логику здесь со своими собственными функциями и все работало нормально. Ваш метод sendUpdate кажется правильным, а также функция subscribe. Итак, логика RxJS в порядке для меня. Проблема может быть в другом мире кода, который не отображается.

Единственная проблема, которую я выяснил, это тип updateListNewOrder. Он должен быть Observable<Response> вместо Observable<ServerResponse>, если вы используете модуль @angular/http.