一旦计时器运行为零,就执行一个函数

Posted

技术标签:

【中文标题】一旦计时器运行为零,就执行一个函数【英文标题】:Execute a function once the timer runs zero 【发布时间】:2021-12-02 17:26:06 【问题描述】:

我有一个包含以下数据的数据库条目:


   _id:"fdjshbjds564564sfsdf",
   shipmentCreationTime:"12:17 AM"
   shipmentExpiryTime:"12:32 AM"

我要做的是根据数据集中提供的创建和到期时间从前端(ReactJS)创建一个计时器。一旦计时器运行为零,我想执行一个 API 调用回后端。

函数如下:

exports.expireShipmentOffer = async (req,res) => 

    const  shipmentOfferId  = req.body;

    try 
        const updatedOffer = await ShipmentOrder.findOneAndUpdate(_id: shipmentOfferId , $set:status:'Expired' , new: true)
       
        const newNotification = await Notification(accountId: updatedOffer.accountId ,  notificationHeader: ` Shipment Order Expired `  , notificationMessage:`Your Shipment Request $shipmentOfferId has been expired due to no response from the carrier` , timeAndDate : moment().format('LLL'), actionPath:`/shipmentOffer/$updatedOffer._id`)
    
        await newNotification.save();
    
        res.json(
            status: 200,
            message: updatedOffer
        )
     catch (error) 
        res.json(
            status: 500,
            message:error.message
        )
    


我能做些什么来实现这一目标?

【问题讨论】:

【参考方案1】:

你可以通过不同的方式实现这一点,其中一种是注册一个回调并根据你的数据集使用 setTimout() 函数,然后你可以在这个函数中执行请求

【讨论】:

【参考方案2】:

不太了解

您要创建倒计时或计时器吗?

如果您想创建倒计时,请将值保存在一个状态中,并在它为零时调用您的 API。

但是如果你想创建一个计时器,我建议你使用Promise docs

const tiemr = () => 
    return new Promise(done => 
        setTimeout(() => 
            done(callYourAPI());
        , 5000); // after 5s
    )

【讨论】:

以上是关于一旦计时器运行为零,就执行一个函数的主要内容,如果未能解决你的问题,请参考以下文章

一旦发生另一个事件,我的 libevent 计时器就会停止……这正常吗?

时间堆定时器

进入定时器中断函数后,定时器数据还在工作吗?

当我执行代码+测试时,Azure 函数中的计时器触发器不起作用

iOS:当用户滚动表格视图时标签停止更新

Java--定时器问题