使用长 运行 进程时的 Meteor 反应最佳实践
Meteor reactivity best practices when working with long running processes
这是我正在尝试提出一个好的解决方案的场景。
- 用户单击浏览器中的按钮。
- 显示流程微调器。
- 在服务器上执行一个方法。
3.1.方法将消息添加到队列。
3.2.方法将 message id
和 status
存储在 Mongo 集合中。
3.3.方法 returns 与浏览器相同的消息 ID。
- 在将来的某个时候,相同
message id
的 status
会在 Mongo 数据库中更新。
4.1 流程微调器不再显示
处理步骤 4.1 的最佳方法是什么?我真的很想避免每隔几秒执行一次 AJAX 请求以确定消息状态的老式方法。
我对你的确切问题了解不够,无法给出准确的答案,所以这是我的假设:
- 有一个名为
Queue
的集合,其中包含所有正在处理的请求。
Queue
中与当前用户相关的所有条目均已发布。
- 在处理用户的任何项目时都应显示微调器(如果不是这样,则只需稍作修改)。
这是一个示例 autorun,它将根据需要切换微调器元素:
Template.myTemplate.onCreated(function() {
this.autorun(function() {
if (Queue.find({status: 'processing'}).count()) {
$('#spinner').show();
} else {
$('#spinner').hide();
}
});
});
或者,您可以直接在模板中切换微调器,如下所示:
<template name="myTemplate">
{{#unless isQueueEmpty}}
<div class="spinner"></div>
{{/unless}}
</template>
Template.myTemplate.helpers({
isQueueEmpty: function() {
return Queue.find({status: 'processing'}).count() === 0;
}
});
使用微调器组件创建一个 'displaySpinner' 模板,并使用 template.helper 'processing' 有条件地显示它,如果项目状态为 'processing',则 returns 为真:
{{#if processing}}
{{> displaySpinner}}
{{/if}}
这是我正在尝试提出一个好的解决方案的场景。
- 用户单击浏览器中的按钮。
- 显示流程微调器。
- 在服务器上执行一个方法。
3.1.方法将消息添加到队列。
3.2.方法将message id
和status
存储在 Mongo 集合中。
3.3.方法 returns 与浏览器相同的消息 ID。 - 在将来的某个时候,相同
message id
的status
会在 Mongo 数据库中更新。
4.1 流程微调器不再显示
处理步骤 4.1 的最佳方法是什么?我真的很想避免每隔几秒执行一次 AJAX 请求以确定消息状态的老式方法。
我对你的确切问题了解不够,无法给出准确的答案,所以这是我的假设:
- 有一个名为
Queue
的集合,其中包含所有正在处理的请求。 Queue
中与当前用户相关的所有条目均已发布。- 在处理用户的任何项目时都应显示微调器(如果不是这样,则只需稍作修改)。
这是一个示例 autorun,它将根据需要切换微调器元素:
Template.myTemplate.onCreated(function() {
this.autorun(function() {
if (Queue.find({status: 'processing'}).count()) {
$('#spinner').show();
} else {
$('#spinner').hide();
}
});
});
或者,您可以直接在模板中切换微调器,如下所示:
<template name="myTemplate">
{{#unless isQueueEmpty}}
<div class="spinner"></div>
{{/unless}}
</template>
Template.myTemplate.helpers({
isQueueEmpty: function() {
return Queue.find({status: 'processing'}).count() === 0;
}
});
使用微调器组件创建一个 'displaySpinner' 模板,并使用 template.helper 'processing' 有条件地显示它,如果项目状态为 'processing',则 returns 为真:
{{#if processing}}
{{> displaySpinner}}
{{/if}}