代码之家  ›  专栏  ›  技术社区  ›  dagda1

无法从rxjs 5.0中取消可观测

  •  0
  • dagda1  · 技术社区  · 6 年前

    我有这个功能:

     uploadFiles(files: FileToUpload[]) {
        return Observable.create(async (observable) => {
          const aborters: Aborter[] = [];
    
          for (const fileToUpload of files) {
            let uploadResponse: UploadResponse;
    
            const aborter = Aborter.none;
    
            aborters.push(aborter);
    
            try {
              uploadResponse = await this.upload(file)
            } catch (err) {
            }
          }
    
          return () => {
            console.log('coooo');
    
            this.files$.next([]);
    
            for (const aborter of aborters) {
              if (!aborter.aborted) {
                aborter.abort();
              }
            }
          };
        });
      }
    

    然后我就这样订阅:

    this.uploadSubscription = this.uploadService.uploadFiles(this.control.value).subscribe(
          () => console.log('progress'),
          (e) => {
            console.log(`errored with ${e}`);
            this.uploadSubscription.unsubscribe();
          },
          () => {
            console.log('completed');
            this.uploadSubscription.unsubscribe();
          }
        );
    

    ngOnDestroy 这样地:

    ngOnDestroy() {
        if (this.uploadSubscription) {
          this.uploadSubscription.unsubscribe();
        }
      }
    

    但是,即使调用了unsubscribe方法,从 Observable.create

    0 回复  |  直到 6 年前
        1
  •  1
  •   martin    6 年前

    我认为问题在于 Observable.create 回调实际上是返回一个承诺,而不是一个拆卸方法。

    你用 async 关键字,以便它返回一个承诺,以便稍后调用时 return () => {} Promise<() => void> 所以它从来没有被调用过。即使你打电话也不行 unsubscribe .

    await 因为你从不向 observer .