2017-02-12 40 views
0

我有兩個服務自定義HTTP請求返回一個錯誤在angular2

Http client service 

get(url):any{ 
    this.storage.get('token').then((name) => { 
    let headers = new Headers(); 
    this.createGeneralHeaders(headers); 
    return this.http.get(url+"?access-token="+name, { 
     headers: headers 
    }); 

}); 

後來才知​​道有這個

constructor(private _httpClient:HttpClient){} 

    getTrucks():Observable<any>{ 
    return this._httpClient.get(this.trucksurl+"phone-trucks") 
     .map(res => res.json().data) //returns an error 

    } 

第二個服務返回無法讀取的不確定

+0

請正確設置您的代碼。 –

+0

Ive格式化它 –

回答

0
屬性映射錯誤

您的get(url)方法不會返回任何內容。這就是你遇到這個問題的原因。

另外請注意,您應該被指定any類型。如果你讓它推斷返回類型爲void,但是你指定返回類型爲any,那麼編譯器就會發現這個錯誤,因爲它沒有理由將類型推斷過程短路。

我意識到很多角度的例子都是這樣做的,但這些例子並不是很好的TypeScript代碼的例子。

假設在第一個服務http是官方角2 HTTP服務的引用,你會想是

import {Observable} from 'rxjs/Observable'; 
import 'rxjs/add/observable/fromPromise'; 
import 'rxjs/add/operator/mergeMap'; 

export class HttpClient { 
    get(url: string) { 
    const headers = new Headers(); 
    this.createGeneralHeaders(headers); 

    return Observable 
     .fromPromise(this.storage.get('token')) 
     .flatMap(
     name => this.http.get(`${url}?access-token=${name}`, {headers}) 
    ); 
    } 
} 

在原密碼,get不返回任何東西,並更新其返回結果then調用將導致它返回PromiseObservable而不是Observable。由於消費代碼正在呼叫map我假定其意圖是返回Observable。這可以通過使用Observable.fromPromise來實現。另一種方法是直接從存儲服務中返回Observable,但不知道該服務的內部,上述選項更簡單。

+0

get(url)的使用是附加訪問令牌值,我試圖在返回this.storage.get ....時添加返回值,但是這不能執行get http請求。我如何格式化它仍然附加訪問令牌,並仍然執行http獲取 –

+0

我更新了我的答案,但請記住,它取決於storage.get的返回值以及其他一些關於各種正確性的小括號你還沒有包括的方法 –

+0

現在我得到一個錯誤,即'typeof Observable'類型中不存在Property'flatMap'。 –