将this.unblock()与Meteor percolate一起使用:synced-cron

时间:2017-02-16 19:11:29

标签: javascript node.js meteor cron

是否可以将this.unblock()与percolate一起使用:synced-cron?我希望PJ2_1,PJ2_2,PJ2_3能够快速打印出来而不是等待Meteor.call()在10秒内完成,但事实并非如此。

工作示例:

SyncedCron.add({
  name: 'pj2',
  schedule: function(parser) {
    return parser.text('every 30 seconds');
  },
  job: function() {
    console.log("PJ2_1:");

    Meteor.call('fa2', function(err, res) {
      if (err) {
        console.log("FA2: ERROR");
      }
    });

    console.log("PJ2_2:");

    Meteor.call('fa2', function(err, res) {
      if (err) {
        console.log("FA2: ERROR");
      }
    });

    console.log("PJ2_3:");
  }
}); 

示例Meteor.methods():

if (Meteor.isServer) {
  Meteor.methods({
    'fa2': function() {
      this.unblock();
      const data = HTTP.get('http://www.fakeresponse.com/api/?data={%22Hello%22:%22World%22}&meta=false&sleep=10');
      return data;
    }
  })
}

1 个答案:

答案 0 :(得分:1)

当服务器调用方法时,

this.unblock没有按预期的方式工作。根据消息来源,服务器上的unblock是无操作的。这是有道理的,因为在服务器上没有连接(你没有进行基于DDP的调用),所以没有什么可以解锁本身。

不是调用方法,而是直接使用指定的回调调用HTTP.get,然后您将观察到您想要的行为。

或者,定义一个由方法代码共享并在SyncedCron作业中调用的函数。