![](/img/trans.png)
[英]Return Observable of single item from http.get in Angular 5
[英]return proper object from angular http.get with promise
我有一个获取数据结构的 http get 函数,但我真的很想拥有实际的对象(我有函数)。
public async get(guid: string): Promise<PctLayer>
{
return await this.http.get<PctLayer>(`${this.url}/${guid}`, { headers: this.header }).toPromise();
}
我可以通过
let layer = Object.assign(new PctLayer(), await this.layerService.get(info.id));
这很好地完成了工作。 有没有办法将 Object.assign 移动到异步获取中? 我无法让它与 Promise 一起工作,即当我在 async get 中调用 Object.assign 时,我不确定如何仍然返回 Promise。
我知道有不同的解决方案,而不是使用 Object.assign,但它们涉及更多的代码,我喜欢保持代码简短且易于使用。
return await this.http.get<PctLayer>(`${this.url}/${guid}`, { headers: this.header })
.map(r => {
Object.assign(new PctLayer(), r);
})
.toPromise()
可能为你工作。 只需在可观察链中包含Object.assign
,然后将其映射到 promise
因为我是RxJS 5时代,下面也是6.x版本:
return await this.http.get<PctLayer>(`${this.url}/${guid}`, { headers: this.header })
.pipe(map(r => {
Object.assign(new PctLayer(), r);
}))
.toPromise()
在我的个人项目中,当我需要将数据从 HTTP fetch 注入到一个对象中时,我通常只用 REST-response 作为输入参数构造新对象:
export interface MyClassInterface {
A: string;
}
export class MyClass implements MyClassInterface{
public A: string;
constructor(iIn: MyClassInterface) {
this.A = iIn.A
/* and so on */
}
public myUsefulFinction() { /*Do stuff*/ }
}
然后假设 GET-response 与接口兼容,你可以
return await this.http.get<PctLayer>(`${this.url}/${guid}`, { headers: this.header })
.pipe(map(ifc => MyClass(ifc)))
.toPromise()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.