Функция типа void не может быть назначена типу Observable <any> - PullRequest
2 голосов
/ 05 ноября 2019

Я хочу найти список пользователей, выбранных из API. Сначала я инициализирую список, а затем хочу иметь возможность фильтровать имена пользователей в списке. Я построил логику с асинхронными наблюдаемыми. Но в моей второй функции. searchList() Я получаю сообщение об ошибке this.userList => Function of type void can't be assigned to type Observable<any> и в моей консоли:

_co.searchChanged не является функцией

Я действительно могу 'не могу сказать, почему это дает ошибку.

МОЙ КОД:

service.ts

// get the user list from the api
getList(offset = 0): Observable<any> {
    return this.http.get(`${this.url}/users?offset=${offset}&limit=10`)
  }

page.ts

 public searchTerm: string = "";
 userList: Observable<any>;

constructor(private userService: UserService) {}

 ngOnInit() {

    this.getAllUsers();   // intialize the userList which should be searched
 }

  // function to map the users
  getAllUsers() { 
    this.userList = this.userService.getList(this.offset) 
    .pipe(map(response => response.results));
  }

  // filter the users for username
  filterUsers(searchTerm) {
    this.userList.subscribe(res => {
      const result = res.filter(user => {
        return user.username.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
      });
      return result;
    });
  }

  searchList() {
    this.userList = this.filterUsers(this.searchTerm);  // here I get the error
  }

page.html

<ion-searchbar mode="ios" class="items-searchbar" animated mode="ios" [(ngModel)]="searchTerm" (ionChange)="searchList()" placeholder="Filter by name..."></ion-searchbar>
...
<ion-list>
    <ion-item  lines="none" *ngFor="let user of (userList | async); let i = index">
      </ion-item>
  </ion-list>  

1 Ответ

1 голос
/ 05 ноября 2019

Функция типа void не может быть назначена типу Observable.

В сообщении об ошибке говорится, что userList ожидает назначения наблюдаемой, но filterUsers() нетвозвращая что-либо, поэтому void возвращается и присваивается.

Измените функцию fitlerUsers(), чтобы она возвращала наблюдаемое. Я использую оператор map () для преобразования результатов.

filterUsers(searchTerm) {
  return this.userList.pipe(
    map(res => {
      const result = res.filter(user => {
        return user.username.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
      });
      return result;
    })
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...