属性'pipe'在类型'void'Angular 9中不存在

时间:2020-08-16 06:42:50

标签: javascript angular typescript rxjs

我为角音频创建了一个功能:

 private streamObservable(url) {
    new Observable(observer => {
      // Play audio
      this.audioObj.src = url;
      this.audioObj.load();
      this.audioObj.play();

      const handler = (event: Event) => {
        observer.next(event);
      };

      this.addEvents(this.audioObj, this.audioEvents, handler);
      return () => {
        // Stop Playing
        this.audioObj.pause();
        this.audioObj.currentTime = 0;
        // remove event listeners
        this.removeEvents(this.audioObj, this.audioEvents, handler);
      };
    });
  }

当我需要使用该功能时,会显示错误消息:

功能使用:

 playStream(url) {
    return this.streamObservable(url).pipe(takeUntil(this.stop$));
}

并显示此错误:

类型'void'上不存在属性'pipe'。

是什么问题?我该如何解决?

2 个答案:

答案 0 :(得分:3)

您需要从调用的函数中返回可观察对象。

就像-return new Observable (observer => {

 private streamObservable(url) {
    return new Observable(observer => {
      // Play audio
      this.audioObj.src = url;
      this.audioObj.load();
      this.audioObj.play();

      const handler = (event: Event) => {
        observer.next(event);
      };

      this.addEvents(this.audioObj, this.audioEvents, handler);
      return () => {
        // Stop Playing
        this.audioObj.pause();
        this.audioObj.currentTime = 0;
        // remove event listeners
        this.removeEvents(this.audioObj, this.audioEvents, handler);
      };
    });
  }

答案 1 :(得分:0)

对我来说,解决方案是一个非常简单的错误,在我的情况下,我返回了一个 observable,但我没有正确调用该方法。我错过了方法调用中的 ()

原始代码

this.service.method.pipe().subscribe();

固定代码

this.service.method().pipe().subscribe();