Я ищу способ дождаться, чтобы пользователь прекратил взаимодействие, а затем сделать HTTP-запрос, для этого я ищу оператор debounceTime()
из Rx Js, но цель, которую я жду for это массив, который я определил.
Это сценарий:
export class KeywordSelectionComponent implements OnInit {
constructor(private proposalService: ProposalService) { }
@ViewChild(MatTable, {static: true}) kwTable: MatTable<any>;
@ViewChild(MatPaginator, {static: false}) paginator: MatPaginator;
@Input() proposalId: string;
keywordInput = new FormControl(null, Validators.required);
dataSource: MatTableDataSource<Keyword>;
displayedColumns = ['action', 'keyword', 'searches', 'competition', 'cpc'];
suggestedKeywords: Keyword[] = [];
selectedKeywords: string[] = [];
fetchSuggestions(seeds?: string[]) {
const ideas = {
seeds: [],
limit: 25
};
this.proposalService.getKeywordIdeas(this.proposalId, ideas).pipe(retry(3)).subscribe(res => {
this.suggestedKeywords = res;
});
}
}
Я не включаю здесь весь компонент, но идея заключается в следующем:
У меня есть список suggestedKeywords
, который я отображаю на странице, каждый из которых должен вызывать метод addKeyword()
, чтобы добавить это ключевое слово в dataSource
, и после этого я вызываю метод fetchSuggestions()
, чтобы получить новые ключевые слова. заполнить список suggestedKeywords
.
Проблема возникает, когда я пытаюсь выбрать несколько ключевых слов в быстрой последовательности, так как это вызовет запрос для каждого из этих кликов для обновления списка suggestedKeywords
, поэтому я хотел использовать debounceTime()
для предотвращения запуска запроса до тех пор, пока пользователь не прекратит нажимать элементы на некоторое время; однако для этого требуется, чтобы Observable изменял элемент, насколько мне известно, но в моем случае это просто простой массив.
Есть ли какой-то способ отслеживать значение массива, чтобы после изменения он ждет некоторое время, прежде чем сделать HTTP-запрос, например Observable?
EDIT : Использовал оператор from()
, как предложено в комментариях, чтобы на самом деле слушать изменения мне нужно определить другие методы? Я думаю о чем-то похожем на valueChanges()
в FormControls
.
Просматривая больше документации, я склоняюсь к Subject
, BehaviorSubject
и т. Д .; но я не уверен, что это будет правильный подход, кто-нибудь может привести пример, как это сделать?