gpt4 book ai didi

meteor - 根据 Meteor 中的当前时间进行响应式订阅

转载 作者:行者123 更新时间:2023-12-02 01:44:08 24 4
gpt4 key购买 nike

在允许客户端之间实时聊天的应用程序中,我的目标是集成允许定义在未来时间点传递的消息的功能。

在下面的示例中,我能够插入直接插入到模板中的消息。但是,我想只显示时间小于或等于当前时间的消息,但一旦到达时间就自动显示具有 future 时间点的消息。例如,如果我从控制台插入一条消息,该消息应在未来 30 秒后通过调用 Meteor.call("createMessage", 30000, "hello in 30 seconds") 显示,该消息应在 30 秒后自动显示。

我开始将发布函数中的查询限制为 time: {'$lt': new Date()}。但是,我很难使它具有反应性。我尝试了 Tracker.autoruncursor.observe 的几种组合,但均未成功。

任何人都可以提示我如何在以下运行示例中完成所需的 react 吗?

1) html文件

<body>
{{> chat}}
</body>

<template name="chat">
{{#each chatMessages}}
{{time}} - {{message}} <br>
{{/each}}
</template>

2) js文件

//server and client 
Messages = new Mongo.Collection("messages"); //{time: Sun Nov 02 2014 22:17:32 GMT+0100 (CET), message: "hello"}

//server
if(Meteor.isServer){
Meteor.methods({
'createMessage': function(timeOffset, message){
Messages.insert({
time: new Date(new Date().getTime() + timeOffset),
message: message
});
}
});

Meteor.publish("messages", function(){
return Messages.find({
//time: {'$lt': new Date()}
});
});
}

//client
if (Meteor.isClient) {
Template.chat.helpers({
chatMessages: function(){
return Messages.find({});
}
});

Tracker.autorun(function (){
mySub = Meteor.subscribe('messages');
});
}

最佳答案

如果 Date() 是一个响应式(Reactive)数据源,它会工作,但事实并非如此。

您可以在服务器端创建一个计时器来处理它。我看到的最佳设计 id:选择下一条消息的 future 日期并设置一个带有时差的计时器,并获取下一条消息的时间。当然,这取决于您的应用程序的工作方式。

阅读有关 Meteor 中计时器的更多信息:https://docs.meteor.com/#/full/timers

关于meteor - 根据 Meteor 中的当前时间进行响应式订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26704765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com