1

次のコードで正常に動作しているデータ テーブルを更新するために REST API をポーリングしようとしています。

pollData(url, interval) {
  return Rx.Observable.interval(interval)
    .mergeMap(() => this.http.get(url));
}

// get data
this.dataService.pollData(this.url, this.updateInterval)
            .subscribe(
                data => console.log(data),
                err => console.log(err),
                () => console.log('done'));

問題は、エラーと完了が呼び出されないことです。これを onError および onCompete で動作させるための提案は大歓迎です。ありがとう!

4

2 に答える 2

1

私がこの問題をどのように解決し、必要な機能を実装したかを誰かが知りたがっている場合に備えて。基本的に、オブザーバブルを別のものにラップし、エラーをデータとして返す必要がありました。

initiatePolling(url, interval) {

    var http = this.http;

    return Rx.Observable.create(function (observer) {

        // initial request (no delay)
        requestData();
        var timerId = setInterval(requestData, interval);

        function requestData() {
            var subscription = http.get(url).timeout(20000)
                .subscribe(
                    result => {
                        observer.next(result);
                        subscription.unsubscribe();
                    },
                    err => {
                        observer.next(err);
                        subscription.unsubscribe();
                    },
                    () => {
                        subscription.unsubscribe();
                    });
        }

        return function () {
            observer.complete();
            window.clearInterval(timerId);
        }
    });
}
于 2016-02-12T01:01:39.503 に答える