2017-03-04 10 views
2

私は、顧客がカスタムプロバイダーから呼び出されたサービスを通じて残りのユニットをチェックするイオン2プロジェクトを持っています。現時点で顧客は参照番号を入力することができ、プロバイダはいつものようにユニットを返すでしょう。私が欲しいのは、このサービスをバックグラウンドで定期的に呼び出すことです.30分ごとに言って、ユニットが顧客に通知できる特定の値以下になったときにユニットをチェックします。イオン2サービスをスケジュールする

GetUnitsProvider:

import { Injectable } from '@angular/core'; 
    import { Http } from '@angular/http'; 
    import 'rxjs/add/operator/map'; 
    import { Observable } from 'rxjs/Rx'; 
    import { Meter } from '../models/meters'; 

    @Injectable() 
    export class GetUnitsProvider { 
     constructor(public http: Http) {} 
     // get the customer units 
     loadUnitsBalance(id:number): Observable<Meter[]> { 
     return this.http.get(`http://example.com/balance.pl?referencenumber=${id}&api=json`) 
      .map(res => <Meter[]>res.json()); 
     } 
    } 

UnitsPage.tsあなたのサービスで

import { Component } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 
import { Meter } from '../../models/meters'; 
import { GetUnitsProvider } from '../../providers/get-units-provider'; 

@Component({ 
    selector: 'units-page', 
    templateUrl: 'unitspage.html' 
}) 
export class UnitsPage{ 
    reading: Meter[]; 
    clientReferenceNumber:any; 
    constructor(public navCtrl: NavController,public params:NavParams,private getUnitsProvider: GetUnitsProvider) { 
    this.clientReferenceNumber = params.get("clientMeterNumber"); 
    getUnitsProvider.loadUnitsBalance(this.clientReferenceNumber).subscribe(reading => { 
    console.log(reading); 
    this.reading=reading; 
    }); 
    } 

} 

答えて

2

constructor(public http: Http) { 
    Observable.interval(30 * 60 * 1000) 
      .switchMap(this.http.get(`...`)) 
      .map(res => res.json()) 
      .subscribe(res => this.check(res)) 
} 

private check(res: <Meter[]>) { 
    // check whether to notify the user 
} 

そして、あなたは必要はありません(自分のモジュール内でこれを使用しますサービスを注入するどこでもe):

providers: [ 
    { 
     provide: APP_INITIALIZER, 
     use: GetUnitsProvider, 
     deps: [Http], 
     multi: true 
    } 
], 
+1

こんにちは、ありがとう、それは:-) – bobin56