通过收集迭代的流星延迟

时间:2016-08-06 12:28:01

标签: javascript meteor meteor-methods

你好我希望在迭代集合时在我的流星服务器端方法中构建一个延迟。 Meteor._sleepForMs方法每次都会导致异常并重启我的应用程序。 哪种方法可以延迟收集迭代?

 Meteor.methods({
 ....
 start: function() {
 let data = Strategy.find({}, {limit: 5}).fetch();
        for (let i = 0; i < data.length; ++i) {
            mqttClient.publish("test", data[i].charge);
            Meteor._sleepForMs(data[i].duration*1000);
        }
  }

2 个答案:

答案 0 :(得分:1)

使用Meteor.setTimeout

.link {
  &:hover {
    color: red
  }
}

并且还可以看到why to use that vs vanilla setTimeout()

编辑对于变量:

start: function() {
  Meteor.setTimeout(function() {
    let data = Strategy.find({}, {limit: 5}).fetch();
    for (let i = 0; i < data.length; ++i) {
      mqttClient.publish("test", data[i].charge);
    }
  }, 1000);
}

编辑您可以使用RawCollection对象执行所需操作,将其maxTimeMS设置为

start: function() {
  let data = Strategy.find({}, {limit: 5}).fetch();
  for (let i = 0; i < data.length; ++i) {
    Meteor.setTimeout(function() {
      mqttClient.publish("test", data[i].charge);
    }, data[i].duration);
  }
}

答案 1 :(得分:0)

另一种方法如下,但在30次迭代后,它不会延迟持续时间字段时间并在1-10秒之间迭代随机值。 顺便说一句,我的数据库中有成千上万的文件。

var Future = Npm.require('fibers/future');
                var future = new Future();
                Meteor.setTimeout(function() {
                    future.return();
                    let d = `${moment(data[i].t).format("YYYY-MM-DD HH:mm:ss")} ${data[i].field}`;
                    mqttClient.publish("test", d);
                }, data[i].duration*1000);
                future.wait();