Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何在客户端等待,直到服务器端的mongo连接就绪?_Mongodb_Meteor - Fatal编程技术网

Mongodb 如何在客户端等待,直到服务器端的mongo连接就绪?

Mongodb 如何在客户端等待,直到服务器端的mongo连接就绪?,mongodb,meteor,Mongodb,Meteor,我的meteor服务器和远程mongodb实例之间的连接有点慢。我是否可以在客户端等待,在服务器未建立到mongo的连接之前不注册订阅?执行此操作的一种基本方法是使用Meteor.autorun侦听Meteor.userId()中的更改。如果您能够获得此信息,您将知道您已连接到MongoDB。如果您没有处理身份验证,那么您可以在服务器端创建一个从MongoDB返回内容的方法。当它返回某些内容时,在客户端成功后,您可以启动所有订阅。最可靠的方法是通过Meteor.call调用。如果以同步调用(无回

我的meteor服务器和远程mongodb实例之间的连接有点慢。我是否可以在客户端等待,在服务器未建立到mongo的连接之前不注册订阅?

执行此操作的一种基本方法是使用Meteor.autorun侦听Meteor.userId()中的更改。如果您能够获得此信息,您将知道您已连接到MongoDB。如果您没有处理身份验证,那么您可以在服务器端创建一个从MongoDB返回内容的方法。当它返回某些内容时,在客户端成功后,您可以启动所有订阅。

最可靠的方法是通过Meteor.call调用。如果以同步调用(无回调)的方式执行此操作,则客户端将等待调用完成。以下是如何异步执行此操作:

  Meteor.call('isEverythingReady', param1,
    function(error, result) {
      if (error === undefined) {
        Meteor.subscribe("mystuff");
        Session.set("sess1", "whatever");
      } else {
        alert("There was an error during startup.");
      }
    });
然后

if (Meteor.isServer) {
  Meteor.methods( {
    isEverythingReady: function(param1) {
      // can you connect to database?
      return true;
    }
  }
}

我在Meteor的一个项目中也遇到了同样的问题,当我翻阅他们的文档并找到解决方法时,这个答案确实奏效了。但是,您可能应该列出如何使函数(将编辑添加到您的答案中)不确定我是否理解您的注释-回调函数显示在上面的代码段中。是的,但是要调用的函数没有列出如何创建它,当我最初尝试此操作时,我尝试创建一个默认函数x(),而不是meteor.methods()。至于评论中的问题,是的,您可以通过这种方式连接到数据库。您有一个输入错误:
isEverythingReady:function(param1)
中缺少
y
。愚蠢的规则需要至少6个字符的差异,我才能编辑答案。如果你有更新,你应该编辑你的问题。是的,这是最有用和最简单的方法。应该有更好的方法检查Mongo就绪性,但我认为它现在不在Meteor的优先列表上。