Отслеживание Вы предоставили недопустимый объект, где ожидался поток. Вы можете предоставить Наблюдаемый, Обещающий, массив или Повторяющийся

#javascript #angular #typescript

Вопрос:

Итак, я унаследовал проект, написанный на угловом языке, который я лично раньше не использовал. Мой JS в целом не так уж велик.

Мне любопытно, может ли кто-нибудь дать какие-либо советы по отслеживанию ошибок такого типа. Выходные данные журнала не очень помогают, но я думаю, что у меня есть код, на который это влияет. Но я не уверен на 100%. Если это указано в приведенном ниже коде, может ли кто-нибудь сказать мне, что я сделал не так?

 ERROR TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
    at subscribeTo (subscribeTo.js:41)
    at subscribeToResult (subscribeToResult.js:6)
    at CatchSubscriber.push../node_modules/rxjs/_esm5/internal/operators/catchError.js.CatchSubscriber.error (catchError.js:40)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:80)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:60)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:80)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:60)
    at FilterSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:80)
    at FilterSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:60)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/OuterSubscriber.js.OuterSubscriber.notifyError (OuterSubscriber.js:13)
 

Я полагаю, что ошибка возникает из этих двух блоков кода при попытке загрузить данные о событиях для заполнения таблицы:

event.api.js

   getEvents(retries:number=0): Observable<any> {
    let url = this.apiURL   'events'
    let headers = new HttpHeaders();
    headers  = headers.append('Content-Type', 'application/json');
    headers  = headers.append('Authorization', this.authService.getToken());
    
    return this.http.get(url, {headers} )
      .map(
        (data) => {
          return Observable.from(Promise.resolve(data['payload']['events']));
        }
      )
      .catch(
        (error) => {
          let errMsg: string;
          if (error instanceof Response) {
              const body = error.json() || '';
                const err = JSON.stringify(body);
              errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
          } else {
                errMsg = error.message ? error.message : error.toString();
          }
          if(retries   <= 20){
            return this.getEvents(retries);
          }
          else {
            return error;
          }
        }
      )
  }
 

eventlist.component.js

   onLoadTable() {
      if(this.authService.getToken() == null){
        return;
      }
    
      this.processing = true;
      this.errorMsg = "";
      
      this.api.getEvents()
        .subscribe(
          data => {
            this.processing = false;
            this.dataSource.data = data;
            this.paginator.firstPage();
        },
          (err) => {
              this.processing = false;
              var errorReturned = (err.error != undefined amp;amp; err.error['message'] != undefined) ? err.error['message'] : ""; 
              this.errorMsg = "Error while retrieving event list: "   errorReturned;
        }
    );
  }
 

Комментарии:

1. это может быть в subscribeTo.js или subscribeToResult.js, стек не показывает, что у вас есть проблемы с предоставленным вами кодом

2. Попробуйте преобразовать return Observable.from(Promise.resolve(data['payload']['events'])); строку в return Observable.of(Promise.resolve(data['payload']['events']));