gpt4 book ai didi

AngularJS 2 a Promise resolve 在 feching 时丢失类标识

转载 作者:搜寻专家 更新时间:2023-10-30 21:52:16 25 4
gpt4 key购买 nike

总结:我应该获取一些具有类方法的 Org 对象。但是当我获取数据时,我看到的是 Object 实例,而不是 Org 实例。这是最好的结果吗?或者我可以说服我的程序给我 Org 对象吗?

详情:我正在使用最新版本的 Angular 2。我的代码稍微修改了一些教程代码。这是我的 org.service.ts 的一部分:

getOrgs(): Promise<Org[]> {
return this.http
.get(this.orgUrl)
.toPromise()
.then(response => response.json().data as Org[])
.catch(this.handleError);
}

getOrg(id: number): Promise<Org> {
return this.getOrgs()
.then((orgs: Org[]) : Org => orgs.find(org => org.id === id));
}

这是我的解析器的一部分:

resolve(route: ActivatedRouteSnapshot): Promise<Org>|boolean {
let id = this.authService.user.orgId;

return this.orgService.getOrg(id).then((org: Org) : Org|boolean => {

if(org) { // <-- Breakpoint here
return org;
} else {
// If the Org isn't available then the edit page isn't appropriate.
this.router.navigate(['/provider/home']);
return false;
}

});
}

我正在通过内存服务获取我的数据:

export class InMemoryDataService {

createDb() {
let org1 = new Org();
org1.id = 12;
org1.donor = true;
org1.name = 'Great Actors Theater';
let org2 = new Org();
org2.id = 19;
org2.donor = false;
org2.name = 'Sunnyside Group Home';
let org: Org[] = [];
org.push(org1);
org.push(org2);
[SNIP]

我的 Org 类是这样的:

export class Org {
id: number;
donor: boolean;
name: string = "";

deepCopy(): Org { ... }

equals(other: Org): boolean { ... }
}

当我在断点处查看数据时,我看到一个对象具有字段(id、donor、name)但没有函数。我也没有在那里看到 Org 的定义——如果我调用“org instanceof Org”,我会得到一个错误,指出找不到 Org。 “typeof org”产生“object”。

我希望将 equals() 等作为 Org 类方法。但目前我只有 Javascript 对象,它们 Org 只能通过鸭子输入。我能从中变得更好吗?

谢谢,杰罗姆。

最佳答案

从 JSON 构建 Org 实例。

类似于:

.then(response => {
// validate response
return response.json().data.map(d => new Org(d))
})

然后在类声明中定义如何构造一个Org实例,例如:

export class Org {
id: number;
donor: boolean;
name: string = "";

constructor(data: any) {
// validate data
this.id = data.id;
this.donor = data.donor;
this.name = data.name;
}
...
}

关于AngularJS 2 a Promise resolve 在 feching 时丢失类标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41475204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com