我正在通过获取方法将函数传递给Kendo Grid字段之一。该函数在console.log上完美返回,但是在Kendo Grid中,仅返回[object Object]。
这是情况。我目前正在使用两种服务:
1. ReviewService
2. UserService
通过使用 ReviewService 返回Kendo Grid中的数据。数据之一是“ id” 。我创建了一个函数,用于根据“ id”从 UserService 中找到用户名。因此,我在fetch方法中使用了该函数。
获取方法
protected fetch(state: any): Observable<GridDataResult> {
this.loading = true;
this.pagination = new Pagination(state.skip, state.take);
return this.ReviewService.getByCriteria(this.pagination, this.apiVisa)
.pipe(
map(
response =>
<GridDataResult>{
data: response["objectList"].map(review => ({
id: review.id,
email: this.displayUser(review.id)
})),
total: response["totalRecords"]
}
),
tap(() => (this.loading = false))
);
}
功能
public getUser(value): Observable<any> {
return this.UserService.getByGuid(value, this.apiVisa);
}
public displayUser(id) {
console.log("GUID: ", id);
return this.getUser(id)
.pipe(
map((x: any) =>
x.data
))
.subscribe(x => {
this.getItem = x.username;
// return this.getItem;
console.log("Username: ", x.username);
return x.username;
// return this.getItem;
})
}
预期结果
在Kendo Grid中:阿迪巴
在console.log中:Adibah
实际结果
在Kendo Grid中:[object Object]
在console.log中:Adibah
答案 0 :(得分:0)
在您的displayUser
方法中,您返回的是Subscription
,而不是实际的x.username
。您不能只返回.subscribe
中的函数来传递其值。您可以使用combineLatest运算符等待第二个可观察对象完成。
因此,您必须从.subscribe
中删除displayUser
,并将combineLatest
链接到getByCriteria
的管道