安排我的 api 每 60 秒调用一次

schedule my api call for every 60 seconds

我正在编写一个简单的 angular2 网络应用程序,它每 60 秒点击一次 api。 我有一个 api 呼叫,我想安排呼叫,一切正常。

如何每 60 秒调用一次 API?
我的代码

app.componenet (calling class)
  constructor(HttpWebServiceService1: HttpWebServiceService1){
    HttpWebServiceService1.getHTTP()
      .subscribe(//do my stuff here);}

以上呼叫我的 api 呼叫 class

import { Chart } from './myCode';

@Injectable()
export class HttpWebServiceService1 {
      constructor(private http: Http) {}
      getHTTP() :Observable<Chart[]> {
        //hit the api and get josn string or error
        return this.http.get('http://XX.XX.XX.XX/test/test').map((res:Response) => res.json()).catch((error:any) => Observable.throw(error.json().error || 'Server error'));

  }
}

简单的方法就是使用setInterval。 (see the docs)

您还可以利用 RxJS:

 Observable.interval(60000)
           .switchMap(() => {
              // return your http call here
              return HttpWebServiceService1.getHTTP()
           })

以上将 return 一个 Observable,它每 60 秒使用您的服务尝试一次 http 请求,然后发出该 http 请求的结果。

您可以使用一个间隔,然后每次间隔发出时,您可以使用 switchMap 获取 http 调用的结果,然后订阅它。 @snorkpete 有一个正确的答案。如果你需要立即获取数据然后每60秒之后你可以使用concat运算符立即获取结果然后将它切换到像这样的间隔:

public getData(){
  return this.getHttpRequest().concat(
          Observable.interval(60000)
          .switchMap(() => this.getHttpRequest()));
}

private getHttpRequest(): Observable {
  return this.http.get('http://XX.XX.XX.XX/test/test').map(res => {
              return res.json();
            });
}

Demo