Javascript Meteor setInterval和查询
我希望有一个函数,每5秒钟检查数据库中的所有条目,以确定某个值是否为false,如果找到,则检查某个逻辑条件,如果满足逻辑条件,则将该值更改为true。 我的函数运行良好,直到我的集合中出现了带有Javascript Meteor setInterval和查询,javascript,meteor,setinterval,Javascript,Meteor,Setinterval,我希望有一个函数,每5秒钟检查数据库中的所有条目,以确定某个值是否为false,如果找到,则检查某个逻辑条件,如果满足逻辑条件,则将该值更改为true。 我的函数运行良好,直到我的集合中出现了带有isItReady:false的内容。当我没有的时候,它显然找不到任何东西,我开始出错 我应该如何正确地执行此操作?我不想停止我的间歇,因为可能很快会有东西进入收藏,然后我的inverval就停止了 我怎样才能做这样的事情: 如果没有与我的搜索标准匹配的内容-productDate=Products.f
isItReady:false
的内容。当我没有的时候,它显然找不到任何东西,我开始出错
我应该如何正确地执行此操作?我不想停止我的间歇,因为可能很快会有东西进入收藏,然后我的inverval就停止了
我怎样才能做这样的事情:
如果没有与我的搜索标准匹配的内容-productDate=Products.findOne({isItReady:false})代码>间隔停止,一旦插入新内容,我将再次启动inverval
var logicCheck = Meteor.setInterval( function () {
productDate = Products.findOne({isItReady: false}); //query to find all entries with isItReady: false
var timeNow = Date();
var timeCreated = productDate.startOfCountdown;
timeCreated = timeCreated.toString(); //converts timeCreated from object to String(in Mongo its a object)
var productId = productDate._id;
console.log(typeof timeNow) //string
console.log(typeof timeCreated) //string
console.log(timeNow + "timeNow")
console.log(timeCreated + "timeCreated")
if (timeCreated <= timeNow) {
console.log("check") //this works well
Products.update({_id: productId}, {$set: {isItReady: true}}, function(error, result) {
console.log(productId) //all good
if (error){
console.log(error.reason) //check the error
} else{
console.log("File with the id: " + result + " just get update")
}
});
}
}, 5000);
var logicCheck=Meteor.setInterval(函数(){
productDate=Products.findOne({isItReady:false});//查询以查找isItReady:false的所有条目
var timeNow=Date();
var timeCreated=productDate.startOfCountdown;
timeCreated=timeCreated.toString();//将timeCreated从对象转换为字符串(在Mongo中是一个对象)
var productId=productDate.\u id;
console.log(typeof timeNow)//字符串
console.log(typeof timeCreated)//字符串
console.log(timeNow+“timeNow”)
console.log(timeCreated+“timeCreated”)
如果(timeCreated您每5秒轮询MongoDB的方法非常简单。您最好创建一个跟踪器。autorun
函数,以便对任何出现isItReady==false
例如:
Tracker.autorun(function(){
var notReadyProducts = Products.find({ isItReady: false });
notReadyProducts.forEach(function(p){
if ( your logic ... ) Products.update({ _id: p._id },{ $set: { isItReady: true }});
});
});
这假设您正在发布(在服务器上)和订阅(在客户端上)一组产品
,其中将包括这些未准备好的产品
在这种模式下,99.99%的时间都不会有代码运行,然后在产品未准备就绪的准确时刻,该代码就会生效
您可能想了解更多关于反应式编程的知识,以及它如何完全改变您处理常见问题的方式。还有许多其他可用资源。您好,谢谢您的回答。我同意您的看法,反应式编程更好。我尝试并创建了此函数:Tracker.autorun(function(){var notReadyProducts=Products.findOne({isItReady:false});var productId=notReadyProducts.{u id;notReadyProducts.forEach(function(productId){if(1<2){Products.update({u id:productId},{$set:{isItReady:true}});})
但这给了我一个错误,你可以在这里找到:你能编一个简单的MeteoPad示例吗?没有其他代码的错误没有多大帮助。当然,你在这里。基本上,在我得到错误跟踪器之前,我不需要添加太多-跟踪器。自动运行
只能在客户端上使用。另请参见你的MeteoPad没有发布(从服务器)或(从客户端)订阅产品集合。