2017-11-11 1275 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. 
}); 
}`