我需要创建具有Array的服务并触发警报

时间:2017-05-04 01:52:59

标签: angular typescript

我正在尝试在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);
}

我该如何解决?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要以x毫秒的速度调用警报。您可以使用Observable.interval:

执行此操作
  import { Observable } from 'rxjs';

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

这将每秒打勾一次,并在您传入的毫秒数过后运行finally()回调。我不知道你想如何使用它,但Observables非常强大,你可以用Observable.interval做更多的事情。

仅添加.subscribe(),因为在observable有订阅者之前,间隔永远不会开始。您可以在此省略.subscribe()并返回另一个组件可能订阅的observable。为了简单起见,我把它留了下来。我强烈建议你研究它是如何工作的。

这个倒数计时器问题也更复杂:Time CountDown in angular 2

答案 1 :(得分: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);
  });
}