Ionic3本地通知异常:设置不同触发时间却同时弹出求助
解决Ionic3本地通知同时触发的问题
嘿,我一眼就瞅出你代码里的问题啦!你在使用moment处理时间的时候踩了个常见的小坑——moment对象是不可变的,调用.add()方法后并不会修改原来的变量,你那些moment().add()的代码等于白写了,导致两个通知的触发时间根本没拉开足够差距!
问题出在哪?
看你原来的代码:
let three_sec = new Date(new Date().getTime() + 3000) let six_sec= new Date(new Date().getTime() + 6000) moment(three_sec).add(3, "second") moment(six_sec).add(6, "second") this.LocalNotifications.schedule([ { id: 0, text: "3sec", trigger: {at: three_sec} }, { id: 1, text: "6second", trigger: {at: six_sec}, } ])
你用moment(three_sec).add(3, "second")只是创建了一个新的moment实例,但没有把这个新实例赋值回three_sec变量,所以three_sec还是最初的「当前时间+3秒」,six_sec还是「当前时间+6秒」。如果设备处理速度快,这两个通知可能会看起来几乎同时触发,而且你本来想额外叠加的3秒、6秒完全没生效。
修正后的代码
方法一:正确使用moment(记得赋值+转成Date对象)
const now = new Date(); // 用moment计算时间后,转成Date并赋值给变量 const three_sec = moment(now).add(3, 'second').toDate(); const six_sec = moment(now).add(6, 'second').toDate(); this.LocalNotifications.schedule([ { id: 0, text: "3sec", trigger: { at: three_sec } }, { id: 1, text: "6second", trigger: { at: six_sec } } ]);
方法二:不用moment,直接用原生Date更简单
const nowTimestamp = Date.now(); const three_sec = new Date(nowTimestamp + 3000); // 当前+3秒 const six_sec = new Date(nowTimestamp + 6000); // 当前+6秒 this.LocalNotifications.schedule([ { id: 0, text: "3sec", trigger: { at: three_sec } }, { id: 1, text: "6second", trigger: { at: six_sec } } ]);
为啥这样能行?
- 第一种方法里,我们把moment处理后的结果用
.toDate()转成了Ionic LocalNotifications需要的Date类型,并且赋值给了对应的变量,确保触发时间是正确的。 - 第二种方法直接用原生时间戳计算,避免了moment不可变对象的坑,代码更简洁,也不容易出错。
内容的提问来源于stack exchange,提问作者Parco A
相关产品推荐
相关产品推荐

