'void'类型中不存在属性'filter'。在角度

问题描述 投票:0回答:3

我想在Promises返回值后执行过滤器,从服务获取值但不能进一步执行。

过滤器,地图没有任何适用于它。这里有什么问题,或者我们无法从退回的服务功能中应用过滤器。任何建议

错误:'void'类型中不存在属性'filter'。

这是我的服务。

loadUsers() {
    fetch('http://api.icndb.com/jokes/')
        .then((response) => {
            return response.json();
         }).then((data) => {
             this.values = data
             console.log(data);
         }).catch((ex) => {
             console.error('Error fetching users', ex);
    });
}

然后在我的component.ts中

export class SignUpComponent implements OnInit {
    ngOnInit() {
        this.newService.loadUsers().filter(res => res.id == '1');
    }

    constructor(private newService: MyDataService) { }
}
angular
3个回答
4
投票

承诺。函数loadUsers()包含一个承诺。您需要先退回承诺:

loadUsers() {
  return fetch('http://api.icndb.com/jokes/')
  .then((response) => {
    return response.json();
  }).then((data) => {
    this.values = data
    console.log(data);
    return data;
  }).catch((ex) => {
    console.error('Error fetching users', ex);
  })
}

然后,

ngOnInit() {
    this.newService.loadUsers().then(function(users) {
        users.filter(res => res.id == '1');
    })
}

loadUsers()返回一个promise,而不是像常规函数那样的值。这意味着,loadUsers()需要时间来完成。如果是这样,promise对象包含现在解析的值。您可以使用<Promise object>.then()提取此值,return fetch('http://api.icndb.com/jokes/')...将函数作为参数。您传递给.then(在本例中为用户)的函数的参数包含您要查找的内容。


1
投票

首先你的函数loadUsers不返回任何东西,你应该写: loadUsers() { return fetch('http://api.icndb.com/jokes/') .then((response) => { return response.json(); }).then((data) => { this.values = data return data; }).catch((ex) => { console.error('Error fetching users', ex); }) } ngOnInit() { this.newService.loadUsers() .then(res => { res.filter(res => res.id == '1'); }) } ,除了我不确定我们承诺有过滤方法。可以这样做:

object

0
投票

继续其他答案,你的json响应是value,filter是Array方法。 json响应包含export class App { loadUsers() { return fetch('https://api.icndb.com/jokes/') .then((response) => { return response.json(); }).then((data) => { return data.value; }).catch((ex) => { console.error('Error fetching users', ex); }) } 属性,它是对象的数组。看到plnkr

Demo

qazxswpoi

© www.soinside.com 2019 - 2024. All rights reserved.