据我所知,当返回值中只有一个单个对象时,.filter()方法对.json()返回的响应不起作用。我不知道如何处理这个问题。
getFavorites() {
const userId = this.authService.getActiveUser().uid;
return this.http.get(this.databaseAddress + userId + '.json')
.map(
(response: Response) => {
return response.json();
})
.do(
(data) => {
if(data) {
this.favorites = data;
}else {
this.favorites = [];
}
})
}
this.favoritesService.getFavorites()
.subscribe(
(list: Recipe[]) => {
if(list) {
this.favoriteRecipes = list.filter(
item => item !== null
);
} else {
this.favoriteRecipes = [];
}
}
);
返回错误:
ERROR TypeError: list.filter is not a function
答案 0 :(得分:0)
如果API未返回任何数据,您的回复将为null
/ empty
。 filter
操作仅适用于Array类型。考虑从[]
运算符返回map
空数组。
getFavorites() {
const userId = this.authService.getActiveUser().uid;
return this.http.get(this.databaseAddress + userId + '.json')
.map(
(response: Response) => {
return response.json() || []; // return blank [] if data is null or empty
})
.do(
(data) => {
if(data) {
this.favorites = data;
}else {
this.favorites = [];
}
})
}
答案 1 :(得分:0)
正如您所提到的,问题不在于响应为空/空时,问题是响应中只有1个对象。
只需将您拥有的任何结果附加到空数组中,就完成了......
getFavorites() {
const userId = this.authService.getActiveUser().uid;
return this.http.get(this.databaseAddress + userId + '.json')
.map(
(response: Response) => {
return response.json();
})
.do(
(data) => {
if(data) {
this.favorites = [].push(data);
}else {
this.favorites = [];
}
})