2017-05-04 25 views
0

我正嘗試在Angular 2中創建一個鬧鐘,我需要觸發鬧鐘所需的所有毫秒,但它是如何實現的?我需要創建具有陣列的服務,並且會觸發鬧鐘

這是我的服務文件。

import { Injectable } from '@angular/core'; 


     @Injectable() 
     export class AlarmService { 
      constructor() {} 

      setUpAlarms(time){ 
      var all = JSON.parse(localStorage.getItem('user')); 
       for(var i =0; i < all.length; i++){ 
       var hours = all[i]['hours']; 
       var eventStartTime = new Date(); 
       var eventEndTime = new Date(hours.replace('T',' ').replace('-','/')); 
       var duration = eventEndTime.valueOf() - eventStartTime.valueOf();   
       console.log(duration); 
       } 

      console.log("CAME HERE"); 
       return true; 

      } 
} 

這是我的組件TS。

ngOnInit() { 
    let time = new Date().getTime() 
    this.alarmService.setUpAlarms(time); 
} 

我該如何去做呢?任何幫助將不勝感激。

回答

0

如果我正確理解這一點,您希望以毫秒爲單位調用警報。爲此,您可以使用Observable.interval:

import { Observable } from 'rxjs'; 

    callAlarmIn(milliseconds) { 
    Observable 
     .interval(1000) 
     .take(milliseconds/1000) 
     .finally(() => { 
     console.log('ring ring ring!'); 
     }) 
     .subscribe(); 
    } 

這將蜱每秒一次,將運行最後()回調,一旦你通過了通過了毫秒。我不知道你想如何使用它,但Obserbles非常強大,你可以用Observable.interval做更多的事情。

僅添加.subscribe(),因爲直到observable擁有訂戶纔會啓動間隔。您可以在此省略.subscribe()並返回另一個組件可能訂閱的可觀察值。爲了簡單起見,我把它放在了裏面。我強烈建議你看看它是如何工作的。

也有這個倒數計時器問題,這是更復雜的:Time CountDown in angular 2

0

雖然@ Eeks33的回答是好,這裏是一個很好的含糖,沒有可見的版本

export default class { 
    async soundAlarmIn(milliseconds: number) { 
    await delay(milliseconds); 
    console.log('Wake up!!!'); 
    } 
} 

function delay(milliseconds: number) { 
    return new Promise(resolve => { 
    setTimeout(resolve, milliseconds); 
    }); 
}