Angular "scheduler.schedule is not a function" using observable

An-*_*oid 2 javascript observable rxjs typescript angular

I'm having an issue with an observable :

In a service I have a function (in edit.component):

public patchOne(entity: Tier): Observable<any> {

    const userData: any = this.httpService.getDataFromLocalStorage(AuthService.LOCAL_STORAGE_USER_TAG);

    return this.httpService.patch(`/someurl/${entity.uid}`, {
      params: {
        user_uid: JSON.parse(userData).userUId,
      },
      body: entity.createPatchTier(),
    }).map((res: any) => {
      // TODO : to complete
      return {};
    }).catch((error: any) => Observable.throw('patchOne - ', error.json().errorMessage || 'Server error'));
  }
Run Code Online (Sandbox Code Playgroud)

Calling it from component (in edit.component):

  onSave() {
    if (this.validateFormData()) {
      this.tierService.patchOne(this._item).subscribe(() => {
        this.appCommunicationService.valid('Success');
      }, (error: any) => {
        this.appCommunicationService.error(error.message);
      });
    } else {
      this.appCommunicationService.info('Fail');
    }
  }
Run Code Online (Sandbox Code Playgroud)

Triggered from a button with this property (ViewComponent.html):

(click)="component.onSave()"
Run Code Online (Sandbox Code Playgroud)

I'm having this error uppon clicking :

ERROR TypeError: scheduler.schedule is not a function
    at ErrorObservable.webpackJsonp.../../../../rxjs/observable/ErrorObservable.js.ErrorObservable._subscribe (ErrorObservable.js:72)
[...]
webpackJsonp.../../../../../src/app/components/edit/edit.component.ts.EditTiersComponent.onSave @   edit.component.ts:99
(anonymous) @   ViewComponent.html:14
Run Code Online (Sandbox Code Playgroud)

Any idea ?

Kir*_*kin 6

看起来你在这一行有一个错误:

.catch((error: any) => Observable.throw('patchOne - ', error.json().errorMessage || 'Server error'));
Run Code Online (Sandbox Code Playgroud)

Observable.throw具有以下特征:

public static throw(error: any, scheduler: Scheduler): Observable
Run Code Online (Sandbox Code Playgroud)

如您所见,第二个参数是scheduler. 在您的代码中,您提供了第二个参数,因此最终 RxJs 会尝试调用schedule您的字符串 ( error.json().errorMessage || 'Server error')。

您需要更新错误消息以使用字符串连接。例如:

'patchOne - ' + (error.json().errorMessage || 'Server error'))
Run Code Online (Sandbox Code Playgroud)

或者也许使用字符串插值:

`patchOne - ${(error.json().errorMessage || 'Server error')}`
Run Code Online (Sandbox Code Playgroud)