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