Angular 6 return Observable - PullRequest
       6

Angular 6 return Observable

0 голосов
/ 07 октября 2018

Я новичок в Angular (использовал AngularJs в течение ряда лет), и я борюсь с Observables :( У меня есть этот метод:

filterProducts(categoryId: string, questions: Question[], organisationId: string): Observable<any> {
  var formulas = this.formulaService.getFromSelectedAnswers(questions);
  let shouldFilter = this.shouldFilterProducts(categoryId, questions, formulas);
  if (!shouldFilter) return;

  return this.filterOrScore(categoryId, organisationId, formulas).pipe(map(products => {
    if (!products || !products.length) return;

    this.products.length = 0;
    this.products.push.apply(this.products, products);
    this.questionService.filterQuestionsByProducts(products, questions);      
    this.questionService.updateSession(questions);
  }));
}

Линия if (!shouldFilter) return; не подходит. Мне нужночтобы вернуть Observable, чтобы мои подписки работали. Кто-нибудь знает, как это сделать?

1 Ответ

0 голосов
/ 07 октября 2018

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

import {empty} from 'rxjs';

filterProducts(categoryId: string, questions: Question[], organisationId: string): Observable<any> {
  var formulas = this.formulaService.getFromSelectedAnswers(questions);
  let shouldFilter = this.shouldFilterProducts(categoryId, questions, formulas);
  if (!shouldFilter) return empty();

  return this.filterOrScore(categoryId, organisationId, formulas).pipe(map(products => {
    if (!products || !products.length) return empty();

    this.products.length = 0;
    this.products.push.apply(this.products, products);
    this.questionService.filterQuestionsByProducts(products, questions);      
    this.questionService.updateSession(questions);
  }));
...