繁体   English   中英

使用承诺从 angular http.get 返回正确的对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM