Ошибка: вы указали 'null' там, где ожидался поток - PullRequest
0 голосов
/ 03 марта 2020

Я первый в rx js, и ниже код работает, и нет проблем с использованием в качестве пользователей.

 this.searchField.valueChanges.pipe(
      debounceTime(1000),
      switchMap(searchText => {
        if (searchText .length >= 3) {
          return this.api.post(`api/medicine/medicines`, { product: searchText })
        }
        else {
          return null; // this is make errors
        }
      })
    ).subscribe(term => {
      console.log('api: ', term)
      this.MedicineList = term;
      this.onChangeText();
    });

Это работает на моей стороне, но я вижу ошибки.

Error screen

Я хочу удалить этот журнал ошибок.

Ответы [ 3 ]

3 голосов
/ 03 марта 2020

Ошибка, отображаемая в вашей консоли, гласит: «Вы указали« ноль »там, где ожидался поток. Вы можете указать« Наблюдаемый »,« Обещание »,« Массив »или« Итерируемый »). Эта ошибка действительно описательная. Таким образом, вы возвращаете значение null в блоке if, чтобы исправить проблему, вам нужно предоставить Observable. В зависимости от того, что вам нужно, вы можете принять реальное решение.

Простой способ исправить это - вернуть наблюдаемое (empty (), never (), of (), et c).

)
import {
  empty
} from 'rxjs';

this.searchField.valueChanges.pipe(
      debounceTime(1000),
      switchMap(searchText => {
        if (searchText .length >= 3) {
          return this.api.post(`api/medicine/medicines`, { product: searchText })
        }
        else {
          return empty(); // <- You don't call next with empty
        }
      })
    ).subscribe(term => {
      console.log('api: ', term)
      this.MedicineList = term;
      this.onChangeText();
    });

Подробнее о rx js можно узнать здесь: Rx JS Пустые документы

2 голосов
/ 03 марта 2020

используйте of(null) для преобразования нулевого значения в наблюдаемое. switchMap должен возвращать наблюдаемое.

1 голос
/ 03 марта 2020

В switchMaps вы обрабатываете потоки. Документация гласит: « переключиться на новую наблюдаемую ». Вот почему вы не можете вернуть одно значение. Вместо этого вам нужно вернуть наблюдаемое со значением null.

of(null)
...