如何在离子时间间隔内调用api

时间:2017-10-13 12:27:07

标签: api ionic-framework ionic2 ionic3 intervals

我正在研究离子框架,我希望在ex的某个时间间隔内调用API调用。每30秒,我想使用按钮或其他东西手动启动和停止此API调用。因为我是离子框架的新手,我不知道如何实现这一点,我所知道的就是调用api,但我不知道如何在特定的时间间隔内调用API,手动启动和停止。所以有人可以帮助我吗?谢谢是提前。到目前为止,我所做的一切都在下面,

authenticate.ts

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';

@Injectable()
export class AuthenticateProvider {

    body: any;
//  apiUrl = 'https://jsonplaceholder.typicode.com';
    apiUrl = 'http://dev123:5800/api';

    getToken(body) {

      if (this.body) {
        return Promise.resolve(this.body);
      }

      return new Promise((resolve,reject) => {
        this.http.post(this.apiUrl+'/authenticate',body)
            .subscribe(res => {
                resolve(res);
            }, (err) => {
                reject(err);
            });
      });
    }

}

login.ts

export class LoginPage {

constructor(public navCtrl: NavController,
        public authenticateProvider: AuthenticateProvider) {
    }

getToken() {
    this.authenticateProvider.getToken(this.creds)
        .then(result => {
            if (JSON.parse(result.text()).response !== "OK") {
                this.err = JSON.parse(result.text()).response;
            } else {
                dosomething();

            }
        }, (err) => {
            console.log("Error is" + err);
        });

    }

}

1 个答案:

答案 0 :(得分:0)

创建服务(这几天我忘了它叫做提供者)

ionic g provider interval

提供商代码:

//interval.ts

import {Injectable} from '@angular/core';

@Injectable()
export class IntervalProvider {

  intervalHandle: any = null;

  constructor() {

  }

  toggleInterval() {

    if (this.intervalHandle === null) {
      this.intervalHandle = setInterval(() => {
        this.callAPI();
      }, 1000);
    } else {
      clearInterval(this.intervalHandle);
      this.intervalHandle = null;
    }

  }

  callAPI() {
    console.log('API called');
  }

}

注入并使用提供者。函数toggleInterval()我通过单击按钮调用。

//home.ts 
import { Component } from '@angular/core';
import {IntervalProvider} from '../../providers/interval/interval';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  constructor(private intervalProvider: IntervalProvider) {

  }

  // called by your click button
  toggleInterval() {
    this.intervalProvider.toggleInterval();
  }

}