#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']));