【发布时间】:2021-06-15 08:28:13
【问题描述】:
我正在使用以下代码和 websocket 从数据库中抓取数据并返回给用户。它返回聊天消息、用户状态和其他内容。代码按预期工作(在测试中),但我有几个问题。
setInterval(async () => {
if (connectedUserIDs.length > 0) {
logger.info("short loop...")
await eventsHelper.extractEvents(db, connectedUserIDs, connectedSockets, ws)
}
}, 5000)
问题 1. SetInterval 会等待“await”还是每 5 秒触发一次?无论如何,我认为它会每 5 秒触发一次。
如果是这样的话。
问题 2. 有没有办法重复上述任务,但确保仅在前一次运行以至少 5 秒的时间完成时才重新运行?我想避免同时运行多个查询的情况。也许每次都可以取消并重新启动 setInterval...
谢谢 亚当
【问题讨论】:
-
@Fred Stark LGTM 的答案,但我只想评论说,鉴于您有 websocket,这种轮询循环应该是不必要的。如果可能的话,最好让服务器在更改发生时推送更改(当然,您可能无法控制服务器的操作)。
-
@seesharper 这是一个很好的观点。理想情况下,您将拥有一个数据存储,您的组件可以从/收听数据,然后在 websocket 事件上运行框架的
setState等效 -
eventsHelper.extractEvents()是否真的返回一个仅在其操作完成时才解析的承诺。否则,您接受的答案也不会实现您的目标。 -
eventsHelper.extractEvents() 为过去 15 秒内发生变化的数据抓取多个 DB 表并发送到相关连接。诸如“添加为收藏”、“聊天消息”、“发送给您的礼物”等...(约会系统)...这仅用于发送数据。所有更新/插入都通过对 api 的 POST/GET 调用和 DB 进行...我听说您可以以不同的方式使用 websockets 来获得相同的结果,我现在将对此进行一些研究...谢谢非常感谢您的帮助 Stack Overflow!!!
标签: node.js async-await setinterval