永远完成后运行相同的功能

时间:2015-04-07 14:09:33

标签: node.js infinite-loop

我有一个循环和一个函数tick。每次SQL响应表明队列中有项目时,我想运行tick,如果没有,则等待1秒后重试。如果我们决定运行tick,那么我们等待它完成,然后我们在队列中的新项目之后再次检查数据库。

这里的问题是myLoop()不等待tick()完成。我试图添加一个回调函数,但这没有帮助。

所以现在我的问题是,你如何制作这样的循环并让它永远运行?

如果我在tick(id-number)函数之外运行它myLoop,我的tick函数就可以正常工作。如果我做这样的事情,代码也有效

tick(id-number1, function(result) {
      tick(id-number2, function(result) {
             tick(id-number3, function(result) {

             });
      });
});

但是我无法永远地运行它。

function myLoop() {
    setTimeout(function() {
        //get the first item in queue
        var query = "SELECT id FROM queue where place='" + name + "' order by placeinqueue ASC limit 1";
        console.log(query);
        sendQueryToDatabase(query, function(err, result) {
            if (err) {
                console.log(err);
            }
            //if we have a item in queue, run tick and when finished restart the loop
            if (result.length > 0) {
                tick(result[0].id, function(result) {
                    if (result) {
                        myLoop();
                    }
                });
            }
            //else restart the loop and wait 1 sec
            else {
                myLoop();
            }
        });
    }, 1000);
}

1 个答案:

答案 0 :(得分:0)

尝试异步模块 - https://www.npmjs.com/package/async#forever

永远(fn,errback) 使用回调参数调用异步函数fn,该参数允许它无限期地再次串行调用自身。