2017-10-13 134 views
2

我正在研究離子框架,並且我想在某個時間間隔內調用API調用。每30秒鐘,我想使用按鈕或其他方式手動啓動和停止此API調用。因爲我是新離子框架,我不知道如何實現這一點,我所知道的只是調用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); 
     }); 

    } 

} 
+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-一個間隔)。 – 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()來清除間隔?如何處理this.intervalHandle?清除間隔。 – gaurang

+0

請參閱toggleInterval'clearInterval(this.intervalHandle)'。這將停止計時器關閉。你可以,如果你喜歡有一個暫停/恢復功能,並分別調用'clearInterval'和'setInterval'。 –

相關問題