如何搭建nestjs提醒功能

问题描述 投票:0回答:2

在nestjs中,我有一个POST api来添加一个Date对象,它是向移动应用程序发送通知的日期和时间。

所以我需要检查所有用户,所有提醒都已到达,以便我需要触发我的移动应用程序的提醒。

这是我在nestjs中的函数

import { Injectable } from '@nestjs/common'
import { UserRepository } from '../auth/repositories/user.repository'
import { User } from '@vitabotx/common/entities/auth/user.entity'

@Injectable()
export class NotificationsCronService {
    constructor(private readonly userRepository: UserRepository) {}

    async sleepReminderCron() {
        const users: User[] =
            await this.userRepository.getAllUsersForSleepReminder()

        // Set up interval to check reminders continuously
        const interval = setInterval(async () => {
            const currentDate = new Date()

            for (const user of users) {
                for (const reminder of user.userReminder) {
                    if (currentDate >= reminder.time) {
                        console.log(
                            `User ${user.id} should receive sleep reminder.`
                        )
                    }
                }
            }
        }, 1000)

        setTimeout(
            () => {
                clearInterval(interval)
            },
            59 * 60 * 1000
        )
    }
}

所以我想到运行 setInterval 和 settimeout 来每秒检查是否达到时间,而不是每分钟左右查询数据库一次。

其他项目是否有任何推荐的方法来实现这种场景?

javascript time cron nestjs reminders
2个回答
0
投票

你可以考虑使用像bull这样的库来运行cron作业,当每个用户的提醒时间,它会触发回调。


0
投票

管理动态 cron(或本例中的间隔)的最佳实际方法是使用

@nestjs/schedule
库,因为它集成得很好。 您可以在此处查看更多相关信息NestJS Intervals 这样你就可以实现任何 cron 逻辑(我推荐你使用
setInterval(callback, milliseconds)
方法来解决这个问题)。

© www.soinside.com 2019 - 2024. All rights reserved.