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