Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor setInterval和查询_Javascript_Meteor_Setinterval - Fatal编程技术网

Javascript Meteor setInterval和查询

Javascript Meteor setInterval和查询,javascript,meteor,setinterval,Javascript,Meteor,Setinterval,我希望有一个函数,每5秒钟检查数据库中的所有条目,以确定某个值是否为false,如果找到,则检查某个逻辑条件,如果满足逻辑条件,则将该值更改为true。 我的函数运行良好,直到我的集合中出现了带有isItReady:false的内容。当我没有的时候,它显然找不到任何东西,我开始出错 我应该如何正确地执行此操作?我不想停止我的间歇,因为可能很快会有东西进入收藏,然后我的inverval就停止了 我怎样才能做这样的事情: 如果没有与我的搜索标准匹配的内容-productDate=Products.f

我希望有一个函数,每5秒钟检查数据库中的所有条目,以确定某个值是否为false,如果找到,则检查某个逻辑条件,如果满足逻辑条件,则将该值更改为true。 我的函数运行良好,直到我的集合中出现了带有
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没有发布(从服务器)或(从客户端)订阅产品集合。