如何让一个可观察对象立即返回数据,之后每 5 秒返回一次 [英] How to get an observable to return data immediately and every 5 seconds thereafter

查看:13
本文介绍了如何让一个可观察对象立即返回数据,之后每 5 秒返回一次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个从 webapi 返回数据的 observable.我希望它立即返回数据,并每 10 秒轮询一次 API.下面的代码显示我正在使用间隔"方法.但这会使第一组数据延迟 10 秒.我如何在没有初始延迟的情况下让第一次数据刷新?

I want to create an observable that returns data from a webapi. I'd like it to return the data immediately, and poll the API every 10 seconds. The code below shows I'm using the 'interval' method. But this delays the first set of data by 10 seconds. How do I get that first flush of data to come down with no initial delay?

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;
            });
    }
}

推荐答案

知道了:

        .interval(5000)
        .startWith(0);

这篇关于如何让一个可观察对象立即返回数据,之后每 5 秒返回一次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆