Отмена ожидающего вызова покоя в эффекте ngrx - PullRequest
0 голосов
/ 25 мая 2018

в моем приложении Angular есть страница загрузки.Загрузка обрабатывается службой и запускается эффектом NGRX.

// service 
public upload(file: File): any {
  const formData: FormData = new FormData();
  formData.append('file', file, file.name);

  // create a http-post request and pass the form
  // tell it to report the upload progress
  const request = new HttpRequest('POST', url, formData, {
    reportProgress: true
  });

  return this.httpClient.request(request);}


// Effect
@Effect({ dispatch: false })
  uploadFile = this.actions
    .ofType(ActionTypes.UploadFile)
    .map(toPayload)
    .switchMap(file =>
      this.service.upload(file).map(event => {
        if (event.type === HttpEventType.UploadProgress) {
          // calculate the progress percentage
          const percentDone = Math.round(100 * event.loaded / event.total);
          this.store.dispatch(new UpdateUploadProgressAction(percentDone));
        } else if (event instanceof HttpResponse) {
          if (event.status >= 400) {
            console.error(event);
            this.store.dispatch(new UploadFileFailureAction(event));
          } else {
            this.store.dispatch(new UploadFileSuccessAction(event.body));
          }
        }
      })
    );

Поскольку загрузка может занять некоторое время (по крайней мере, проверка файла), я хочу предоставить пользователю возможность прервать отложенный запрос.

Обычно вы можете использовать метод отмены подписки следующим образом:

cons sub = this.service.upload(file);
... 
sub.unsubscribe();

Но я понятия не имею, как сделать это внутри эффекта.Любые предложения или лучшие практики?

Спасибо :)

...