2016-08-03 15 views
14

Nesnelerin bir listesini alan ve bunu bir api'ye POST yapar bir işlev var.Cant olsun Dize değeri (açısal2/typescript) Gözden geçirilebilir

Bu işlev, Gözden Geçirme işlevini döndürür çünkü daha önce arayan kişi, api yanıtına bağlı olarak ondan bir dize almayı bekler.

Yanıt güzelse Belirli bir dizeye dönmek istiyorum ve eğer bir hata ise farklı bir dize göndermek istiyorum. Bu işlevi çağırmak ve benim component.ts dizeyi almak istiyorum Şimdi

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

:

Bu

bir dize döndürür benim işlevidir

messageToDisplay: string; 

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

ancak bu olmuyor ... hata alamıyorum. Sadece messageToDisplay undefined kalıyor.

Sorun gören var mı?

Teşekkürler! Eğer ihtiyacın varsa

, bu (...) updateListNewOrder geçerli:

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

Gözlemlenebilir öğelerinizi Observable.throw olarak değiştirmeyi deneyin. Rxjs dokümanlar: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/throw.md – ajliptak

cevap

7

Ben kendi fonksiyonları ile burada mantık çoğaltılabilir ve her şey iyi çalıştı. sendUpdate yönteminiz subscribe işlevinin yanı sıra doğru görünüyor. Yani, RxJS mantığı benim için tamam. Sorun, açığa çıkmayan başka bir kod huzurunda olabilir.

Bulduğum tek sorun, updateListNewOrder'un türüydü. @angular/http modülünü kullanıyorsanız, Observable<ServerResponse> yerine Observable<Response> olmalıdır.