首先,我使用的不是Meteor本身,而是Angular-Meteor,所以原理是一样的。我需要做的是在 helper 函数中验证资源是否有效,并根据其结果做出决定。

我认为 findfindOne 集合的功能在客户端是同步的,但看起来它们不是同步的,或者我以错误的方式做事。

我有以下代码:

this.helpers({ 
      post() { 
        let _post = Posts.findOne({ 
          _id: this.postId 
        }); 
 
        if( typeof _post == 'undefined' ) 
          return this.$state.go('404'); 
 
        return _post; 
      } 
    }); 

this.postId 来自 Url 参数。当我浏览应用程序时,一切正常。但是当我刷新页面时, this.postId 已定义,但 Posts.find() 返回 undefined ,显然,它会转到 404 页面.

如何解决这种情况?

请您参考如下方法:

这是因为当您刷新页面时,您的 View 是在数据发送到客户端之前呈现的。要解决此问题,您需要在检查数据是否存在之前确保数据已准备好。换句话说,它的意思是检查您的订阅是否准备好,使用以下代码作为演示:

const handle = Meteor.subscribe('data'); 
 
if (handle.ready()) { 
  const post = Posts.findOne(/**/); 
 
  if (typeof post === 'undefined') { 
    console.log('post does not exist'); 
  } 
} 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!