Meteor:多次调用异步服务器方法

时间:2015-09-16 21:56:15

标签: javascript asynchronous meteor

我需要使用不同参数调用相同服务器方法3次:

  // client code
  var types = ['type1', 'type2', 'type3'];
  for (var i = 0; i < types.length; i++) {
    console.log('client calling', types[i])
    Meteor.call('myMethod', types[i], function (error, result) {
      console.log('client got', types[i])
      Session.set(types[i], result.data);
    });
  }

  // server code
  var Future = Npm.require("fibers/future");

  Meteor.methods({
    myMethod: function (type) {
      var params = {
        type: type
      };

      var future = new Future();
      console.log('server calling', type)
      HTTP.call("GET", Meteor.App.HOST + "/myApi",
        {params: params}, function (error, results) {
          if (error) {
            future.throw(error);
          } else {
            console.log('server got', type)
            future.return(results);
          }
        });

      return future.wait();
    }
  });

服务器HTTP调用最多需要10秒。查看日志,我看到:

// client
client calling type1
client calling type2
client calling type3
client got type1
client got type2
client got type3

// server
server calling type1
server got type1
server calling type2
server got type2
server calling type3
server got type3

客户端日志正常。我希望在服务器上有相同的行为,但似乎一个客户端的调用是按顺序执行的。如果我启动两个客户端,我有以下服务器日志:

// server
server calling type1
server calling type1
server got type1
server calling type2
server got type1
server calling type2
server got type2
server calling type3
server got type2
server calling type3
server got type3
server got type3

这是限制还是我的代码不正确?

1 个答案:

答案 0 :(得分:1)

方法调用中的

this.unblock()将解决这个问题,当你进行一些API调用,发送电子邮件并且不必等待它完成时,它不会阻止流星方法它是好的

  

在方法调用中调用。允许后续方法   客户端开始在新光纤中运行。   http://docs.meteor.com/#/full/method_unblock