从Javascript承诺返回数据
问题描述:
这是在角2和打字稿中完成的。从Javascript承诺返回数据
我想从服务器返回数据并将其传回给角度的组件。
getUsers(): Promise<User[]> {
return this.http.get(this.baseUserUrl + 'GetUsers')
.toPromise()
//.then(resp => resp.json() as User[])
.then(this.returnData)
.catch(this.handleError);
}
private handleError(error: any): Promise<any> {
console.error('An error occurred', error); // for demo purposes only
return Promise.reject(error.message || error);
}
private returnData(data: any): User[] {
var rtn = data.json() as User[];
return rtn;
}
数据从服务器罚款并返回到用户[]罚款也罚款。
但是,它没有返回到JavaScript方法。
ngOnInit(): void {
this.userService.getUsers().then(users => this.users = users);
}
我this.users只是一堆承诺相关的东西,而不是用户数组。
答
说明:你已经在getUsers调用。那么(),所以调用它两次西港岛线不是有它的有关链接一个承诺,让你的代码,你可以设置returnData的承诺得的数据,并能像你这样的IT连锁做。
private returnData(data: any): Promise<User[]> {
var rtn = data.json() as User[];
return Promise.resolve(rtn);
}
现在你可以使用:
this.userService.getUsers().then(users => this.users = users);
但,但使用可观察到的地图运营商的S implest方式:
getUsers(): Promise<User[]> {
return this.http.get(this.baseUserUrl + 'GetUsers')
.map(users => this.returnData(users))
.toPromise()
}
和ngOnInit:
ngOnInit(): void {
this.userService.getUsers().then(users => {
this.users = users
});
}
或者只是观察到:
getUsers(): Observable<User[]> {
return this.http.get(this.baseUserUrl + 'GetUsers')
.map(users => this.returnData(users))
}
和
ngOnInit(): void {
this.userService.getUsers().subscribe(users => {
this.users = users
});
答
的承诺立即返回,所以这是不行的。
成功和错误事件需要在模型级别进行处理,以便您可以对数据(而不是服务的责任)进行所需的操作。该服务只是获取数据并将其发送到回调函数。
事情是这样的:
loadUsers(successCallback, errorCallback): Promise<User[]> {
return this.http.get(this.baseUserUrl + 'GetUsers')
.toPromise()
.then(successCallback)
.catch(errorCallback);
}
// MOVE METHODS TO MODEL CODE
var self = this;
self.users = [];
private handleError(error: any): Promise<any> {
console.error('An error occurred', error); // for demo purposes only
return Promise.reject(error.message || error);
}
private loadData(data: any): User[] {
self.users = data.json() as User[];
}
ngOnInit(): void {
this.userService.loadUsers(loadData, handleError);
}
这可以很容易地观测量也可以解决。我猜OP在获得数据后没有调用这个决心。 – Niladri