gpt4 book ai didi

javascript - MeteorJS 连接延迟问题

转载 作者:行者123 更新时间:2023-12-01 03:02:23 28 4
gpt4 key购买 nike

我对 MeteorJS 完全陌生,只是看看演示和摸索。我可能只是错过了一些非常基本的东西。我正在将 meteor 与 Angular-UI-Router 一起使用。如果我从将数据加载到 Controller 的状态开始,我会遇到问题,因为 DDP 尚未初始化。这类似于 Meteor: How can I tell when the database is ready? 中的描述。

路由配置的相关部分:

        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. 网络套接字连接已启动
  2. 网络套接字连接已准备好使用
  3. minimongo 已刷新
  4. 集合.findOne

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

交叉发布:https://github.com/meteor/meteor/issues/9127

最佳答案

每当您在 Meteor 中订阅时,您都应该在渲染结果之前检查订阅是否准备就绪。通常,当不显示微调器时,您会显示它。

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

DDP 的 websocket 连接需要先启动,发布-订阅才能传输数据,但这在大多数情况下并不是一个非常重要的延迟来源。

当发布在 Tracker.autorun() 中准备就绪时,您可以捕获该事件:

const mySub = Meteor.subscribe('somePublication');

Tracker.autorun(() => {
if (mySub.ready()) ... do something
});

或者在订阅的回调中:

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

关于javascript - MeteorJS 连接延迟问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46376248/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com