【问题标题】:how to call api in time interval in ionic如何在离子的时间间隔内调用api
【发布时间】:2017-10-13 12:27:06
【问题描述】:

我正在研究离子框架,我想在某个时间间隔内调用 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);
        });

    }

}

【问题讨论】:

  • 我想你需要像普通的setInterval() 这样的东西。 link to MDN
  • Angular2 http at an interval 的可能重复项。
  • 创建一个包含用于暂停/恢复它的 API 的服务。当调用 resume() 时,执行 this.interval = setInterval(...)。当 pause() 被调用时执行 clearInterval(this.interval)
  • @PhilipBrack 你能给我举个例子吗?

标签: api ionic-framework ionic2 ionic3 intervals


【解决方案1】:

创建服务(这些天我忘记了它的提供者)

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

}

【讨论】:

  • 好的,我会试试这个并回复你,但告诉我一件事如何通过调用 toggleInterval() 来清除间隔?如何处理 this.intervalHandle?清除间隔。
  • 参见 toggleInterval clearInterval(this.intervalHandle)。这将阻止计时器关闭。如果您喜欢暂停/恢复功能,可以分别调用 clearIntervalsetInterval
猜你喜欢
  • 1970-01-01
  • 2018-10-30
  • 2018-11-25
  • 1970-01-01
  • 2019-07-14
  • 2021-12-30
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
相关资源
最近更新 更多