2017-11-11 1273 views
0

如果我試圖返回一個特定類型的這樣一個承諾:Angular 5的HttpClient:toPromise()接受哪些參數?

public myMethod(): Promise<MyType> { 
    return this.httpClient.get('/my/url').toPromise(); 
} 

...我得到一個錯誤的返回類型無極<對象>不符合預期的類型無極<的MyType >。這是很容易通過將結果或通過這樣來解決:

public myMethod(): Promise<MyType> { 
    return this.httpClient.get<MyType>('/my/url').toPromise(); 
} 

還有另一種選擇,但是,爲了提供一個可選的參數給toPromise()函數。我的IDE說參數的類型是「PromiseCtor:PromiseConstructorLike」或「PromiseCtor:typeof Promise」。

public myMethod(): Promise<MyType> { 
    return this.httpClient.get('/my/url').toPromise(???); 
} 

我想不通什麼語法會滿足???上面,但是。

關於什麼可以作爲一個有效的參數在這裏填寫任何想法?

+0

我認爲這是要求輸入['Promise'構造(https://developer.mozilla.org/en-US/docs/網絡/ JavaScript的/參考/ Global_Objects /無極)。這可以是本地的,也可以是您最喜歡的承諾庫提供的。這不會幫助你用'MyType',順便說一句。 – Bergi

+0

假設您有特殊類型的承諾MyPromise,您可以傳遞該類型(即MyPromise的構造函數)。目標不是解決你的問題。目標也是返回一個特定類型的Promise。 –

回答

0

您需要首先將返回數據映射到您的對象。

public myMethod(): Promise<MyType> { 
    return this.httpClient.get('/my/url') 
    .map(response => <MyType>response.json()) 
    .toPromise(); 
} 
+0

這看起來像你現在不推薦使用的HttpModule,而不是新的HttpClientModule。當我切換到HttpClientModule時,我從地圖代碼中取出了地圖功能,而且沒有它,我的代碼就可以正常工作。 – kshetline

0

你需要指定喜歡的類型:

`public myMethod(): Promise<MyType> { 
return this.httpClient.get<MyType>('/my/url').toPromise().then((res) => { 
// code goes here. 
}); 
}`