2017-10-13 1 views
2

이온 프레임 워크에서 작업 중이며 전의 시간 간격으로 API 호출을 호출하고 싶습니다. 30 초마다 버튼이나 다른 것을 사용하여이 API 호출을 수동으로 시작하고 중지하려고합니다. 내가 이온 framwork에 새로운 나는 그것을 달성하는 방법을 몰라, 내가 아는 모든 API를 호출하는 것입니다,하지만 수동으로 시작하고 중지하는 특정 시간 간격으로 API를 호출하는 방법을 모르겠습니다. 그래서 아무도 나를 도울 수 있습니까? 고마워요. 내가 지금까지했던 것은ionic에서 시간 간격으로 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); 
     }); 

    } 

} 
+0

일반 'setInterval()'과 같은 것이 필요할 것입니다. [MDN에 대한 링크] (https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Timers) –

+1

[Angular2 http를 일정 간격으로 복제 할 수 있습니다] (https://stackoverflow.com/questions/) 35316583/angular2-http-at-an-interval). – David

+0

일시 중지/다시 시작하는 API가 포함 된 서비스를 만듭니다. resume()이 호출 될 때 this.interval = setInterval (...)을 수행하십시오. pause()가 호출 될 때 clearInterval (this.interval)을 수행하십시오 –

답변

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

} 
+0

괜찮아요. 이걸 시도해보고 다시 돌아 오지만, toggleInterval()을 호출하여 간격을 지우는 방법을 알려주시겠습니까? 이걸 어떻게해야 하죠? 인터벌 핸들? 간격을 지우려면. – gaurang

+0

toggleInterval'clearInterval (this.intervalHandle)'에서 참조하십시오. 그러면 타이머가 꺼지지 않게됩니다. 일시 중지/다시 시작 기능을 선호하고 각각'clearInterval'과'setInterval'을 호출 할 수 있습니다. –

관련 문제