在另一个meteor电话里面的meteor电话

我有一个meteor调用结构如图所示:

Meteor.call('method1', function(err, result){ //do something Meteor.call('method2', function(err, result){ //do something }) ... }) 

'method2'有时不被调用。 我尝试了一个解决scheme,为“method2”添加了“setTimeout”,但是在2周后,方法2的剂量不再被随机调用。

任何人有任何线索? 感谢您的帮助。

有关我的代码的更多细节:

1)有两台服务器通过集群连接,命名为server1和server2

2)server1中定义的meteor方法命名为server1_method1和server1_method2

3)server2中定义的meteor方法命名为server2_method1和server2_method2

// server1的客户端

 Meteor.call("server1_method1", function(err, result){ if(result){ Meteor.call("server1_method2", function(err,result){ //do something }) } }) 

// server1的服务器

 var server2 = Cluster.discoverConnection('server2'); Meteor.methods({ 'server1_method1':function(){ server2.call('server2_method1', function(err, result){ //where problem happens if(result){ server2.call('server2_method2', function(err, result){ if(result){ //do something } }) } }) } }) 

// server2的服务器

 Meteor.methods({ 'server2_method1':function(){ //do something like collect data from database }, 'server2_method2':function(){ //do something like collect data from database } }) 

server2调用'server2_method1'偶尔不会触发这些方法。

等待第一个调用的结果做第二个,如下所示:

 Meteor.call('method1', function(err, result){ if (err) { console.log(err); } if (result){ Meteor.call('method2', function(err2, result2){ //do something }) } }) 

如果打算在第二个调用块中使用第一个调用variables,则还要考虑第二个调用参数的其他variables名称

在服务器1上,您的server1_method1应该同步返回结果。 因此,从不调用集群调用的callback(它在范围之外)

 Meteor.methods({ 'server1_method1': function(){ server2.call('server2_method1', function(err, result){ // this won't be called as the main server1_method1 needs to 'return' synchronously }); // this Client expects a returned value return 'ok'; } }); 

您需要将asynchronous函数转换为同步。 像这样的东西

 var server2_method1 = Meteor.wrapAsync(function(callback) { server2.call('server2_method1', function(err, result){ callback(err, result); }); }); var server2_method1 = Meteor.wrapAsync(function(callback) { server2.call('server2_method2', function(err, result){ callback(err, result); }); }); 

然后你可以把它们称为同步函数

 Meteor.methods({ 'server1_method1': function(){ var result1 = server2_method1(); if (result1 == 'something you need') { var result2 = server2_method2(); } return 'ok'; } }); 

要将params添加到同步函数,把它们放在这里就像这样

 var server2_method1 = Meteor.wrapAsync(function(param1, param2, callback) { server2.call('server2_method1', param1, param2, function(err, result){ callback(err, result); }); }); 

您可以像这样调用。您可以在第二个方法调用中使用第一个方法调用的参数

 Meteor.call('method1',var1,var2,function(err, result){ if (err) { console.log(err); } if (result){ Meteor.call('method2',var1,var2, function(err2, result2){ //do something }) } })