METEORJS连接延迟问题



我完全是Meteorjs的新手,只是看演示并四处张开。我可能只是错过了真正基本的东西。我将流星与Angular-UI-Router一起使用。如果我从将数据加载到控制器中的状态开始,我会遇到问题,因为DDP尚未初始化。这类似于流星中描述的内容:我该如何确定数据库何时准备就绪?

路由配置的相关部分:

        resolve: {
            location: ($stateParams) => {
                console.log('find', $stateParams);
                let handle = setInterval(function () {
                    console.log(Meteor.status().connected, Meteor.status().status);
                    console.log( !!Locations.findOne({code: $stateParams.code}) ? 'found' : 'not found' );
                }, 100);
                setTimeout(function () {
                    clearInterval(handle);
                }, 2000);
                console.log(Meteor.status().connected, Meteor.status().status);
                return Locations.findOne({code: $stateParams.code});
            }
        }

,输出为

false "connecting"
false "connecting"
not found
true "connected"
not found
true "connected"
not found
true "connected"
found
true "connected"
found

我的问题是:我是否正确理解这里的问题是,要按照预期的方式工作,它们必须按照此顺序进行:

  1. 启动Web插座连接
  2. Web插座连接可以使用
  3. minimongo刷新
  4. collection.findone

和4。在3之前运行?如果是这样,建议的解决方法是什么?

交叉post:https://github.com/meteor/meteor/issues/9127

每当您的 subscribe 在流星中时,您都应该检查订阅是否在呈现结果之前 ready 。通常,当不是时,您会显示一个旋转器。

const mySub = Meteor.subscribe('somePublication');
if (mySub.isReady()) {
  ... you can access the data using minimongo
} else {
  ... not so fast Jack
}

DDP的Websocket连接需要在Pub-Sub可以传输数据之前启动,但在大多数情况下,这并不是很重要的延迟来源。

当出版物准备就绪时,您可以在Tracker.autorun()

中捕捉事件。
const mySub = Meteor.subscribe('somePublication');
Tracker.autorun(() => {
  if (mySub.ready()) ... do something
});

或从订阅中回调的回调:

Meteor.subscribe('somePublication',() => {
  ... subscription is ready
});

最新更新