Я пытаюсь преобразовать обычный string[]
в Observable<string[]>
и объединить его с существующим Observable<string[]>
.
Затем я буду использовать канал angular2 async
для отображения файла Observable
.
Вот мой код:
import {Injectable} from "angular2/core";
import {Observable} from "rxjs/Observable";
import 'rxjs/Rx';
@Injectable()
export class AppService {
constructor() {
console.log('constructor', 'appService');
this.constructSomeObservable();
}
someObservable$:Observable <string[]>;
constructSomeObservable() {
this.someObservable$ = Observable.create(observer => {
const eventSource = new EventSource('/interval-sse-observable');
eventSource.onmessage = x => observer.next(JSON.parse(x.data));
eventSource.onerror = x => observer.error(console.log('EventSource failed'));
return () => {
eventSource.close();
};
});
this.someObservable$.subscribe(
theStrings=> {
console.log(theStrings);
//Somehow convert the plain array of strings to an observable and concat it to this.someObservable$ observable...
},
error=>console.log(error)
);
}
}
Кто-нибудь может помочь?
Кроме того, я хочу убедиться, что экземпляр службы Observable<string[]>
постоянно обновляется по мере многократного вызова EventSource. Находится ли моя логика подписки в правильном месте?
редактировать 1: я пытался использовать оператор RxJS concat
следующим образом:
this.someObservable$.subscribe(
theStrings=> {
console.log(theStrings);
this.someObservable$ = this.someObservable$.concat(Observable.create(theStrings));
},
error=>console.log(error)
);
}
вместе с трубой angular2 async
:
<ul>
<li *ngFor="#s of appService.someObservable$ | async">
a string: {{ s }}
</li>
</ul>
и ничего не отображается на странице; строки просто отображаются на консоли...
Что я делаю неправильно?
изменить 2: приложение доступно на github здесь
редактировать 3: я учел совет Тьерри, особенно использование канала async
для подписки, а также использование оператора сканирования.
Единственная оставшаяся проблема заключается в том, что мне нужно щелкнуть ссылку маршрутизатора, чтобы строки отображались в шаблоне... Шаблон не обновляется автоматически...
См. проект на github и соответствующий тег: https://github.com/balteo/demo-angular2-rxjs/tree/36864628/536299