Каналы rxjs: аргумент типа Observable, не присваиваемый параметру - PullRequest
0 голосов
/ 19 сентября 2018

Я новичок в rxjs и pipe - и пытаюсь понять, почему я получаю эту ошибку машинописи: «Аргумент типа Observable не присваивается параметру OperatorFunction».Может ли кто-нибудь объяснить это мне?

Намерение состоит в том, чтобы попросить «Привет», но заменить данные на «Пока», когда данные будут переданы по конвейеру.

  ngOnInit() {
    this.getHello()
      .pipe(this.getBye())
      .subscribe(data => console.log(data))
  }
  getHello() {
    return of("Hello")
  }
  getBye() {
    return of ("Bye")
  }
}

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Метод pipe получает OperatorFunction, но вы передаете ему свой метод getBye (), который возвращает Observable.Вы должны передать OperatorFunction, «карту», ​​например:

ngOnInit() {
  this.getHello()
    .pipe(map(_ => this.getBye()))
    .subscribe(data => console.log(data));
}

getHello(): Observable<string> {
  return of('Hello');
}

getBye(): string {
  return 'Bye';
}
0 голосов
/ 19 сентября 2018

Когда вы создаете свой собственный оператор, вы должны обернуть функцию внутри функции.Внутренняя функция вызывается, когда в поток устанавливается новое событие.В то же время у вас будет доступ к самому потоку (sourceStream).

См. Stackblitz для рабочего примера.

 ngOnInit() {
      this.getHello()
          .pipe(this.getBye())
          .subscribe(data => console.log(data))
      }

      getHello() {
        return of("Hello")
      }

      getBye() {
        return (sourceSteam: any) => of("Bye")
      }
    }

https://stackblitz.com/edit/ng-stackoverflow-52413693?file=index.ts

0 голосов
/ 19 сентября 2018

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

this.getHello()
  .pipe(map((data) => { return this.getBye() }))
  .subscribe(data => {
    console.log(data);
  });
getHello() {
  return of("Hello");
}
getBye() {
  return of("Bye");
}

Ссылки для подробной проверки трубных операторов: https://angular.io/guide/rx-library https://blog.hackages.io/rxjs-5-5-piping-all-the-things-9d469d1b3f44

...