流星客户端异步模式 / 如何为订阅列表和回调实现 waitOn
meteor client async pattern / how to implement a waitOn for a list of subscriptions w callbacks
出于各种原因,我正在编写一个不使用IronRouter的应用程序,但必须实现一些类似的逻辑。一个是等待订阅列表准备就绪。
由于这是 meteor 中的异步调用客户端,因此有哪些技术可以做到这一点?
如果我想有一个订阅列表,例如:
sublist = [
PubSubMan.subscribe("Players"),
PubSubMan.subscribe("Stuff")
]
然后在应用程序的其余部分全部.ready() = true
后开始
这样做的好方法是什么?
我不太明白 wait(( 方法是如何在这里的 IR 源代码中实现的
对于 aysnc.js 类型的情况来说,这似乎是一个理想的情况,我想调用一个方法列表并在它们的回调完成后继续,但诉诸节点样式模式对于 meteor 来说似乎有点笨拙。我查看了wrapAsync和meteorhacks异步实用程序,但这似乎主要用于服务器方法和包装NPM包。
如果我能对 ready(( 值列表求和,然后创建一个跟踪器,如果/当该总和发生变化时会触发...... ? 但也不太确定该怎么做。
由于每个订阅在完成后都会触发回调,我想我可以使用计数器来跟踪何时触发回调并保留一个计数器来检查数组的 == 长度,但这似乎又有点不优雅。
编辑:这不是一个理想的解决方案,但以下有效。但我仍然认为我错过了一种更优雅的方法。
subList = [
PubSubMan.subscribe("Players"),
PubSubMan.subscribe("Stuff" )
]
Tracker.autorun (c) =>
subReady = _.filter subList, (item) ->
return item.ready()
allDone = (subList.length == subReady.length)
console.log("subs status: #{subReady.length} / #{subList.length} = ready: #{allDone}")
if allDone
c.stop()
startMainLoop()
与这个问题相关的是关于 Tracker.Autorun 如何选择其计算依赖项Tracker.autorun如何挑选它的计算?
我不确定你的startMainLoop
是什么样的,但这里有一种方法可能适合你。创建一个新模板,只检查所有订阅是否准备就绪;如果是,则呈现真正的主模板,如果不是,则呈现加载模板。
<template name="subscriptionsReadyCheck">
{{#if allSubsAreReady}}
{{> mainTemplate}}
{{else}}
{{> loadingTemplate}}
{{/if}}
</template>
subList = [...]
Template.subscriptionsReadyCheck.helpers {
allSubsAreReady: -> _.every(subList, (sub) -> sub.ready())
}
这假定订阅是在页面加载时创建的,并一直保留到页面关闭。如果需要仅在呈现模板时创建并在销毁模板时停止的订阅,则可以将它们存储在模板实例上:
Template.subscriptionsReadyCheck.created = ->
@subList = [...]
Template.subscriptionReadyCheck.destroyed ->
for sub in @subList
sub.stop()
Template.subscriptionsReadyCheck.helpers {
allSubsAreReady: -> _.every(Template.instance().subList, (sub) -> sub.ready())
}
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- 在没有大量回调函数的情况下在列表元素上循环播放同一动画
- 如何更新列表项由jQuery AJAX调用添加的ASP Dropdown:错误无效的回发或回调
- 如何在选择列表文本更改时触发回调函数(在 onchange 事件触发之前)
- 如何确定回调函数的参数列表
- 加载列表(带图像)时添加回调函数
- Parsley.JS-使用回调获取错误列表
- 流星客户端异步模式 / 如何为订阅列表和回调实现 waitOn
- 如何在Javascript中传递一个字符串或函数名列表作为回调处理
- 从ajax jsonp回调中获取列表
- 在使用javascript向下拉列表添加项目并运行服务器端代码后,无效的回发或回调参数
- 投票系统(多个站点),没有回调的顶部列表的解决方案
- 为回调函数(directionsService)中创建的标记列表设置infoWindow
- 列表项动画化后的回调函数
- Javascript ajax回调使项目列表闪烁
- Bokeh回调是否更新了列表而不是ColumnDataSource
- JQuery-回调下拉列表加载
- 同构SmartClient是否有一个回调,当用户选择表单文本项上的选择列表记录时触发
- 什么是使用模块在要求列表,而不是在回调函数