从angular http.get返回正确的对象

从angular http.get返回正确的对象,angular,http,promise,Angular,Http,Promise,我有一个获取数据结构的HTTPGET函数,但我真的希望有一个实际的对象(上面有函数) 这项工作做得很好。有没有办法将Object.assign移动到异步get中?我无法让它与承诺一起工作,即在异步get中调用Object.assign时,我不确定如何仍然返回承诺 我知道有不同的解决方案,而不是使用Object.assign,但它们涉及的代码要多得多,我喜欢保持代码简短且易于使用 return await this.http.get<PctLayer>(`${this.url}/${g

我有一个获取数据结构的HTTPGET函数,但我真的希望有一个实际的对象(上面有函数)

这项工作做得很好。有没有办法将Object.assign移动到异步get中?我无法让它与承诺一起工作,即在异步get中调用Object.assign时,我不确定如何仍然返回承诺

我知道有不同的解决方案,而不是使用Object.assign,但它们涉及的代码要多得多,我喜欢保持代码简短且易于使用

return await this.http.get<PctLayer>(`${this.url}/${guid}`, { headers: this.header })
.map(r => {
  Object.assign(new PctLayer(), r);
})
.toPromise()
再编辑一次 在我的个人项目中,当我需要将数据从HTTP fetch注入到对象时,我通常只需使用REST响应作为输入参数来构造新对象:

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响应与接口兼容,您可以

return await this.http.get<PctLayer>(`${this.url}/${guid}`, { headers: this.header })
.pipe(map(ifc => MyClass(ifc)))
.toPromise()
return等待this.http.get(`${this.url}/${guid}`,{headers:this.header})
.pipe(映射(ifc=>MyClass(ifc)))
.toPromise()

您还没有展示您是如何尝试的,但至少有两种明显的方法可以做到这一点:在转换为承诺之前,在observable上使用
.pipe(map(…)
,或者在转换为承诺之后使用
。然后(…)
。在过去两年中,我一直在使用这个方法<代码>让层=反序列化(等待this.layerService.get(info.id),PctLayer)。经过多次尝试,我一直在使用这个库,因为它是我发现的唯一一个真正执行巧妙的序列化和反序列化的库。此外,它还可以用于注释。谢谢您的帮助。那对我不起作用。它正在查看PctLayer中的属性和方法,并抛出一个错误,即它们不存在:{}类型不可分配给PctLayer。财产。。。{}中缺少(我在版本6上)
return await this.http.get<PctLayer>(`${this.url}/${guid}`, { headers: this.header })
.pipe(map(r => {
  Object.assign(new PctLayer(), r);
}))
.toPromise()
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*/ }
}
return await this.http.get<PctLayer>(`${this.url}/${guid}`, { headers: this.header })
.pipe(map(ifc => MyClass(ifc)))
.toPromise()