你好我希望在迭代集合时在我的流星服务器端方法中构建一个延迟。 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);
}
}
答案 0 :(得分:1)
.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();