39

webapi からデータを返すオブザーバブルを作成したいと考えています。すぐにデータを返し、API を 10 秒ごとにポーリングしたいと思います。以下のコードは、「interval」メソッドを使用していることを示しています。ただし、これにより最初のデータ セットが 10 秒遅れます。初期遅延なしでデータの最初のフラッシュをダウンさせるにはどうすればよいですか?

export class EventService {
    public events$: Observable<Event[]>;
    private _eventsObserver: Observer<Event[]>;
    private pollInterval: number = 5000;

    private _dataStore: {
        events: Event[];
    };

    constructor(private http: Http) {
        this._dataStore = { events: [] };

        this.events$ = new Observable(observer => this._eventsObserver = observer)
            .startWith(this._dataStore.events)
            .share();
    }

    pollEvents() {
        return Observable.interval(10000)
            .switchMap(() => {
                return this.http.get('app/resources/data/scheduleevents.json')
                    .map((responseData) => {
                        return responseData.json();
                    });
            })
            .map((events: Array<any>) => {
                let result: Array<Event> = [];
                if (events["data"]) {
                    events["data"].forEach((event) => {
                        result.push(event);
                    });
                }
                return result;
            });
    }
}
4

6 に答える 6

77

とった:

        .interval(5000)
        .startWith(0);
于 2016-04-14T06:53:46.930 に答える