这里的第一个问题,但我真的不知道去哪里。我在谷歌上找不到任何可以帮助我的东西。
我正在做巨大的处理服务器端,我想跟踪状态并在客户端显示它。 为此目的,我有一个变量,我正在更新过程。为了跟踪它,我正在使用该客户端:
Template.importJson.onCreated(function () {
Session.set('import_datas', null);
this.autorun(function(){
Meteor.call('readImportState', function(err, response) {
console.log(response);
if (response !== undefined) {
Session.set('importingMessage',response);
}
});
})
});
我正在从模板中读取它(在template.mytemplate.helpers中):
readImportState: function() {
return Session.get('importingMessage');
},
以下是meteor.call调用的服务器端代码:
readImportState: function() {
console.log(IMPORT_STATE);
return IMPORT_STATE;
}
客户端在开始时获取值,但以后永远不会更新.... 我在这里失踪了什么? 如果有人能指出我正确的方向,那将是非常棒的。 谢谢:))
答案 0 :(得分:1)
在撰写本文时,在服务器和客户端之间共享反应状态的唯一简单方法是使用发布/订阅机制。其他解决方案就像打一场艰苦的战斗。
这是您正在寻找的(错误的)解决方案:
jobStates
,其中jobStates
是一个以用户ID作为其键的对象,并将状态字符串作为其值。autorun
不适用于Meteor.call
(没有强制状态强制autorun
再次执行) - 您需要通过{{1}实际每N秒轮询一次}。setInterval
。jobStates
。setInterval
。jobStates
。或者,(2)中的方法应该只读取数据库而不是实际将jobStates
保留在内存中。这种方法很复杂且容易出错。此外,它还需要将状态写入数据库,以便处理重新启动和多个服务器实例。
jobStates
或find
向用户显示状态。正如您所看到的,发布/订阅机制更容易实现,因为流星为您完成了大部分工作。