Как предположил Рахул Сингх, мне просто нужно было импортировать debounceTime, и теперь он работает ... нет необходимости в части канала ...

ько что обновил angular в ионном приложении с версии 4 до 5. У меня есть некоторые входные данные поиска FormControl, которые позволяют пользователю искать базу данных с помощью запросов ajax. Я использовал метод debounceTime () для задержки поискового запроса ajax, но после углового обновления этот метод больше не доступен. Я удалил этот вызов метода, но теперь при каждом нажатии клавиши пользователя на Android делается новый запрос.

Есть ли другой способ добиться этой задержки?

this.searchControl.valueChanges
        .debounceTime(2000)
        .subscribe(search => this.getCities(search));
 Rahul Singh24 нояб. 2017 г., 13:17
Вы добавили импорт для отката вниз?
 Sašo Kovačič24 нояб. 2017 г., 13:15
Я только что отредактировал свой вопрос ... Я забыл установить время отката в секундах ... Я не вижу, как вы устанавливаете задержку в вашем примере
 Rahul Singh24 нояб. 2017 г., 13:12
Вы можете попробовать использовать что-то вродеthis.<form>.get('<controlname>').valueChanges.subscribe
 Sašo Kovačič24 нояб. 2017 г., 14:12
@RahulSingh спасибо ... Я действительно забыл импортировать debounceTime ... вы можете опубликовать ответ, чтобы я мог принять его как правильный?

Ответы на вопрос(3)

Может быть поможет этопример:

let debounce = this.name.valueChanges.pipe(
  debounceTime(1000), // delay 1000 msec
  distinctUntilChanged() // only for changed value
);
debounce.subscribe(changes => {
  console.log(changes);
});

синтаксис для использования операторов Rxjs изменился в следующей версии Rxjs (используется в angular 5). Попробуй это:

this.searchControl.valueChanges
    .pipe(debounceTime(2000))
    .subscribe(search => this.getCities(search));

Импортироватьpipe а такжеdebounceTime если необходимо

 Suraj Rao24 нояб. 2017 г., 14:06
@ SašoKovačič Вы можете показать свои импортные заявления в вопросе?
 Sašo Kovačič24 нояб. 2017 г., 14:09
Как предположил Рахул Сингх, мне просто нужно было импортировать debounceTime, и теперь он работает ... нет необходимости в части канала ...
 Sašo Kovačič24 нояб. 2017 г., 14:04
Привет, спасибо за ответ, но он не работает ... Я получаю "debounceTime не определено" ..
 Suraj Rao24 нояб. 2017 г., 13:54
изменился вrxjs 5.5 точнее...
 Sašo Kovačič24 нояб. 2017 г., 14:06
импорт 'rxjs / add / operator / debounceTime';
Решение Вопроса

Ионные документы:

RXJS 5.5.2 Обновления

Недавнее обновление RXJS включает изменение в применении операторов.

Традиционно операторы применялись так:

import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/switchMap';

export MyClass {

  someMethod(){
    // Using Reactive Forms
    this.input.valueChanges
    .debounceTime(500)
    .switchMap(inputVal => this.service.get(inputVal))
    .subscribe(res => console.log(res))
  }
}

Этот подход включал модификацию прототипа Observable и исправление методов.

RXJS 5.5 представляет другой способ сделать это, что может привести к значительномуменьшие пакеты кодаоператоры.

Использоватьоператорыизмените код сверху, чтобы он выглядел так:

// Use Deep imports here for smallest bunlde size
import { debounceTime } from 'rxjs/operators/debounceTime';
import { switch } from 'rxjs/operators/switchMap'; // <- Please read the update!

export MyClass {

  someMethod(){
    // Using Reactive Forms
    // We use the new `.pipe` method on the observable
    // too apply operators now

    this.input.valueChanges
    .pipe(
      debounceTime(500),
      switchMap(inputVal => this.service.get(inputVal))
    )
    .subscribe(res => console.log(res))
  }
}

Это небольшое изменение позволяет импортировать только те операторы, которые нам нужны в нашем коде. Это приведет к меньшему, более быстрому применению. В этом примере используются Deep Imports, которые позволяют изолировать модуль, который мы хотим импортировать.

Так что в основном вам нужно немного изменить оператор импорта, чтобы использоватьглубокий импорт

import { debounceTime } from 'rxjs/operators/debounceTime';

А затем использоватьdebounceTime внутриpipe(...) метод:

this.input.valueChanges
    .pipe(
      debounceTime(500),
      // you can chain more operators if needed ...
      // ...
    )
    .subscribe(res => console.log(res))

Вы все еще можете использовать старый способ (так как это еще не принципиальное изменение), но используяоператоры lettable приведут к меньшему, более быстрому применению.

ОБНОВИТЬ

Как@lifetimes упоминается в его комментарии (и, как вы можете видеть,Вот), это импорт

import { switch } from 'rxjs/operators/switchMap';

следует заменить на

import { switchMap } from 'rxjs/operators/switchMap';

при использовании более новых версий.

 sebaferreras01 февр. 2018 г., 07:26
Спасибо @lifetimes! Я добавил это к ответу :)
 Sašo Kovačič25 нояб. 2017 г., 19:03
спасибо за ответ ... понятно и сейчас работает ... я приму это как правильный ответ ...
 lifetimes31 янв. 2018 г., 23:06
Ты за это. Я знаю, что это цитата, поэтому не буду редактировать ее, но они переименованыimport { switch } вimport { switchMap } для тех, кто использует более новые версии
 sebaferreras25 нояб. 2017 г., 19:13
Рад слышать, что это помогло @ SašoKovačič :)

Ваш ответ на вопрос