2017-10-13 57 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'。 –

相关问题