最近在做一个禁言功能,有一个逻辑是,根据禁言到期时间,判断当前是否处于禁言当中。
dayjs().isBefore(dayjs(user.ban.banUntil))
但就因为这一行代码,让我吃了不少苦头。用户反馈,会出现未禁言情况下,偶现禁言标识。
经过反复的排查,发现问题可能是这行代码导致的,并且是有概率触发。
在用户未禁言的情况下,代码其实会变成
dayjs().isBefore(dayjs())
我在控制台执行这段代码,绝大多数情况下返回上false, 但也会偶现true
最后的解决办法是,先判空
user.ban.banUntil&&dayjs().isBefore(dayjs(user.ban.banUntil))