unsubscribe is not a function on an observable

筅森魡賤 提交于 2020-05-25 06:03:28

问题


I'm making a drag and drop application and I have created an observable to the mouse position, that repositions my drag-object.

mouseMove$: any;

constructor(){
  this.mouseMove$ = Observable.fromEvent(document, 'mousemove')
    .do((mouseevent: MouseEvent) => {
      if (document.getElementById("drag-object")){
        document.getElementById("drag-object").style.left = (mouseevent.clientX) + 'px';
        document.getElementById("drag-object").style.top = (mouseevent.clientY) + 'px';
      }
  });

With this implementation I have no problem subscribing in this way:

this.mouseMove$.subscribe();

however I cannot seem to unsubscribe by either:

this.mouseMove$.unsubscribe();

or

this.mouseMove$.dispose();

in either case I get the following type of error:

TypeError: this.mouseMove$.unsubscribe is not a function ...

I'm not sure if this has to do with the mouseMove$ type of any, but setting the type as Observable and Observable<MouseEvent> did not work. What am I not understanding here?


回答1:


You're probably using a newer version of RxJS, where there has been an API change where Observable.subscribe returns a Disposable, from which you call .unsubscribe now (dispose became unsubscribe in RxJS5). Unfortunately there are still lots of old tutorials and blog posts out there doing it "the old way", resulting in this confusion.

Thus, your code should be

let disposeMe = this.mouseMove$.subscribe();

and, after you're done

disposeMe.unsubscribe();

For a full list of API changes from Version 4 to 5, check this file.




回答2:


make sure your this.mouseMove$ is an observable first:

if (this.mouseMove$ !== undefined) {
  this.mouseMove$.unsubscribe();
}

probably in your case, you unsubscribe before this.mouseMove$ has not been assigned any value yet.




回答3:


Take a look at brianflove.com.

By setting mouseMove$: ISubscription, should take care of the issue.



来源:https://stackoverflow.com/questions/41191077/unsubscribe-is-not-a-function-on-an-observable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!