Meteor 强制铁路由器从waitOn处取回准备就绪的
目前似乎不可能在路由中强制设置ready()状态。例如: 我有两个预订的服务员。其中一个返回Meteor.Error-现在路由将处于加载状态,没有结束。 有没有一种推荐的方法可以告诉iron路由器“等待,直到subscribtion准备就绪,或者subscribtion失败并出现错误” 编辑: 为了解释我的特殊情况: waitOn是用于搜索的路由。搜索参数是“what”和“where”。在“where”中,我有一个平面字符串地址,需要将其转换为地理坐标。为此,我在服务器端使用googlemaps转换器(因为它是同步的)。当没有找到地址时,我需要返回一个错误“这个地址一定是错的”。为此,我需要返回错误的功能 当我像David Weldon说的那样做时,我需要在waitOn方法中执行这一步骤,但是客户端googlemaps转换器不是同步的,而是异步的,所以这不起作用 一般性建议 您的发布者抛出错误是可以的,但是只有当客户端做了错误的事情时,这些条件才应该受到影响。换句话说,您解决了一个错误的问题—您应该只在知道发布者不会抛出错误时订阅。让我们看一个例子: 假设您的路线需要订阅Meteor 强制铁路由器从waitOn处取回准备就绪的,meteor,iron-router,Meteor,Iron Router,目前似乎不可能在路由中强制设置ready()状态。例如: 我有两个预订的服务员。其中一个返回Meteor.Error-现在路由将处于加载状态,没有结束。 有没有一种推荐的方法可以告诉iron路由器“等待,直到subscribtion准备就绪,或者subscribtion失败并出现错误” 编辑: 为了解释我的特殊情况: waitOn是用于搜索的路由。搜索参数是“what”和“where”。在“where”中,我有一个平面字符串地址,需要将其转换为地理坐标。为此,我在服务器端使用googlemaps
newPosts
和postsForSuperuser
。假设如果用户不是超级用户,则发布者将抛出错误。现在客户的工作就是不让这种情况发生。waiton
定义可以如下所示:
waitOn:function(){
var subs=[Meteor.subscribe('newPosts');
if(Roles.userIsInRole(Meteor.user(),['superuser']))
subs.push(Meteor.subscribe('postsForSuperuser');
返回潜艇;
}
因为我们有条件地添加超级用户的postsForSuperuser
订阅,所以我们不会给发布者抛出错误的机会
您的特定用例
您的案例有点棘手,因为客户机在做正确的事情,但用户输入可能恰好是错误的。在这种情况下,我认为抛出错误是不合适的。以下是一些建议:
dataNotFound
hook来处理这个问题addressErrors
的纯客户端集合,然后调用this。添加了一个动态创建的文档,描述了错误的原因。这一点的实现有点棘手,如果您陷入困境,可能值得提出一个单独的问题。在尝试之前,我会先看看前两个是否有意义
这看起来不错,但帮不了我。我编辑了我的帖子,向你展示了我真正的问题(我需要在waitOn参数之前使用一个异步函数或服务器端同步方法,但如果有错误,我需要返回。)好的,我更新了答案,并提出了一些建议-希望其中一个对你有用。输入很好-再次。我今天会检查这一点,并会给你一个反馈。你好,大卫,很抱歉反应太晚,但我无法测试你的3分。第1点:我可以在路由中添加一个函数(比如onBeforeAction),但这不能像我所说的那样是异步的?而且,正如我所知,没有办法调用在服务器端执行的方法并告诉路由器等待结果,不是吗?第二点:这是我现在更新和做的-所以子循环“准备好了”,但我不知道为什么:是否有错误?因此,这不会很好地解决问题,但必须这样做!第三点:我阅读了文档,这似乎是一种选择。。。如果有可能的话,我想在subscribtion中添加一个“added”或“changed”回调,其中包含它的内容。然后我可以告诉Subscribobt添加了一些内容(例如错误代码),并且我可以在客户端读取这些内容,但这样做是否仍然可行?没有“subscribtion”回调-相反,它似乎有一个集合回调,对吗?我认为这不是最好的解决方案,但可能是唯一可行的解决方案。。。