我正在尝试从REST端点读取数据。读取数据后,我想构造一个实例列表并返回该列表。
但是由于HTTP
GET
函数返回了Observable
方法,因此在根据响应构造它之前,它总是返回空列表。
这是我的代码:
public getUsers() {
let responseValue = this.http.get(this.utils.provideserviceURL('http://test.com/users'));
responseValue.toPromise()
.then(result => {
let usersList: User[] = [];
let jsonResult = result.json();
for (let temp of jsonResult) {
let tempUser = new User(jsonResult.id, jsonResult.username, jsonResult.password, jsonResult.firstName, jsonResult.lastName);
usersList.push(tempUser);
}
console.log(usersList);
return usersList;
})
.catch(err => {
// Error while fetching Users
console.log('Error');
});
}
此函数返回undefined
,然后使用正确的数据打印控制台。
我不完全了解使用toPromise()
的正确方法。如果已经讨论过该帖子,请指向我,然后将此问题重复。
答案 0 :(得分:1)
这是因为在JavaScript中,您不会等到响应返回。您在回应后的行为中返回某些信息没有道理
我认为您应该将列表保存在属性中,并在组件中或要使用它的位置使用它。
public users: Users = undefined
public getUsers() {
let responseValue = this.http.get(this.utils.provideserviceURL('http://test.com/users'));
responseValue.toPromise()
.then(result => {
let usersList: User[] = [];
let jsonResult = result.json();
for (let temp of jsonResult) {
let tempUser = new User(jsonResult.id, jsonResult.username, jsonResult.password, jsonResult.firstName, jsonResult.lastName);
usersList.push(tempUser);
}
console.log(usersList);
this.users = usersList;
})
.catch(err => {
// Error while fetching Users
console.log('Error');
});
}
答案 1 :(得分:1)
这就是我的方法(我看到toPromise已贬值),
constructor(private dataservice: DataService){}
myEmail: string = '';
myID: number = 0;
ngOnInit(){
this.dataservice.getMe()
.subscribe((data: WhoAmI) => {
this.myEmail = data.Contacts.find(x=>x.ContactTypeName == "Email").ContactValue;
this.myID = data.ID;
});