我有一个循环和一个函数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);
}
答案 0 :(得分:0)
尝试异步模块 - https://www.npmjs.com/package/async#forever。
永远(fn,errback) 使用回调参数调用异步函数fn,该参数允许它无限期地再次串行调用自身。